Framer APIframer.com ↗
Search and browse Framer Marketplace templates via API. Get prices, screenshots, creator info, remix counts, and category filters across thousands of templates.
What is the Framer API?
The Framer Marketplace API provides 3 endpoints for searching, listing, and inspecting website templates available on framer.com. The search_templates endpoint returns up to 40 templates per page with fields like price, remix count, creator details, and screenshots. Whether you're building a template discovery tool or cataloging design trends, the API surfaces structured data on portfolios, SaaS sites, landing pages, and more.
curl -X GET 'https://api.parse.bot/scraper/67b046ba-e536-479f-ab03-1f21364e774f/search_templates?page=1&type=template&query=portfolio' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace framer-com-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""Walkthrough: Framer Marketplace SDK — search, browse, and inspect templates."""
from parse_apis.framer_marketplace_templates_api import Framer, Category, TemplateType, TemplateNotFound
client = Framer()
# Search for SaaS templates — limit caps total items fetched.
for template in client.templates.search(query="SaaS", type=TemplateType.TEMPLATE, limit=3):
print(template.title, template.price, template.remixes)
# Browse a category with .list()
for template in client.templates.list(category=Category.PORTFOLIO, limit=3):
print(template.title, template.slug, template.creator.name if template.creator else "Unknown")
# Drill into one template by slug for full details
detail = client.templates.get(slug="pentos")
print(detail.title, detail.price, detail.category, detail.creator_name)
for crumb in (detail.breadcrumbs or []):
print(crumb.name, crumb.url)
# Typed error handling for a missing template
try:
client.templates.get(slug="nonexistent-template-xyz-999")
except TemplateNotFound as exc:
print(f"Template not found: {exc.slug}")
print("exercised: templates.search / templates.list / templates.get / TemplateNotFound")
Full-text search over Framer marketplace templates. query matches title, description, and metadata; results are ranked by relevance. Paginates with up to 40 templates per page. Filters by type (template, plugin, section), style, and feature are optional. Returns total_results count when available.
| Param | Type | Description |
|---|---|---|
| page | integer | Page number for pagination (starts at 1) |
| type | string | Type filter: template, plugin, section |
| query | string | Search query keyword |
| style | string | Style filter (e.g., minimal, dark, modern) |
| feature | string | Feature filter (e.g., responsive, animated) |
{
"type": "object",
"fields": {
"page": "integer - current page number",
"count": "integer - number of templates returned on this page",
"query": "string - the search query used",
"templates": "array of template objects with id, slug, title, description, price, remixes, creator, screenshots, published_url, and relevance rank",
"total_results": "integer or null - total number of matching templates"
},
"sample": {
"data": {
"page": 1,
"count": 40,
"query": "portfolio",
"templates": [
{
"id": 62601,
"rank": 2.04,
"slug": "iris-walker",
"type": "template",
"price": "Free",
"title": "Portfolioz",
"creator": {
"id": 418111,
"city": "bahraich",
"name": "Umar Mirza",
"slug": "umar-mirza",
"avatar": "https://example.com/avatar.jpg",
"country": "IN",
"verified": false,
"description": "I'm a Framer Expert..."
},
"remixes": 1155,
"thumbnail": "https://example.com/thumb.avif",
"created_at": "2026-04-16T08:54:12.449Z",
"meta_title": "Personal Portfolio Resume Portfoli",
"description": "Iris Walker is a personal Portfolio & Landing Page Template...",
"screenshots": [
"https://example.com/ss1.avif"
],
"published_at": "2026-05-04T14:12:22.670Z",
"published_url": "https://portfolioz.framer.ai/",
"conversion_rate": 0.25,
"hover_thumbnail": "https://example.com/hover.avif"
}
],
"total_results": 1873
},
"status": "success"
}
}About the Framer API
Endpoints and Response Data
The search_templates endpoint accepts a query keyword along with optional filters for type (template, plugin, or section), style (e.g., minimal, dark, modern), and feature (e.g., responsive, animated). Each result includes the template's id, slug, title, description, price, remixes, creator, screenshots, published_url, and a relevance ranking. Pagination is controlled via the page parameter, with up to 40 results returned per page and a total_results field indicating the full match count.
Browsing by Category
The list_templates endpoint lets you page through the full marketplace or filter by category slug. Verified category values include personal, business, blog, ecommerce, landing-page, technology, and portfolio. Response objects include meta_title, remixes, published_url, and screenshots alongside standard identity fields. This endpoint is suited for building category-scoped directories or monitoring which templates are currently featured or trending.
Template Detail Lookup
The get_template endpoint accepts a slug (for example, pentos, xtract, or salix) and returns a full detail object including duplicate_url, thumbnail, breadcrumbs, creator name, and status. It also returns a related_templates array containing other templates from the same creator, which is useful for building creator-scoped recommendation flows or attributing design work to specific authors.
The Framer API is a managed, monitored endpoint for framer.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when framer.com changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official framer.com API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Build a Framer template search engine filtered by style (minimal, dark) and feature (animated, responsive)
- Track remix counts over time to identify trending or popular templates across categories
- Aggregate template pricing data to analyze free vs. paid template distribution on the marketplace
- Generate a creator portfolio page by fetching related_templates for a specific author via get_template
- Populate a curated landing-page or SaaS template directory using the list_templates category filter
- Monitor new template additions in a specific category by paginating list_templates regularly
- Compare template metadata (meta_title, description, screenshots) for competitive design research
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.