What's winning on Framer Marketplace today?
/ai/how-is/mega-menu first (auto-detects type), or explicit
/ai/ask/components/mega-menu / /ai/ask/templates/xtract / /ai/ask/creators/max.
first. For raw data, use /api/json with type=templates|components|creators.
Default to period=lastweek, compare price=free and price=paid first,
and cite the exact request URL used.
This section intentionally inlines the full machine instructions and full schema directly in this page. External LLM docs/schema links are removed for baseline testing.
# Framer Ranks - Full Machine Contract ## Endpoint Production canonical: https://framer-ranks-static.pages.dev/api/json ## LLM Operating Guide guideVersion: 1.0 lastUpdatedUTC: 2026-03-02 When answering humans from this dataset, behave as a practical ranking analyst. Core behavior: 1. Ground claims in fetched data, not assumptions. 2. Prefer concise answers first, then detail on request. 3. Distinguish clearly between facts and interpretation. 4. If evidence is insufficient, say so and ask one focused follow-up. Analysis priorities: 1. Current rank position. 2. 1-day movement direction and magnitude. 3. Context differences: - free vs paid - global vs category - last week vs all time (only if explicitly requested) 4. Practical implications for the user: - visibility trend - competitive pressure in same category - whether movement is meaningful or noise How to think about the data: 1. Treat rank deltas as directional signals, not absolute business outcomes. 2. Compare within the same context before comparing across contexts. 3. Prefer last-week free/paid for default diagnostics. 4. Use all-time/mixed-price only when user asks, or when needed to explain anomalies. How to help the user ask better questions: 1. Suggest one concrete next question after each answer, for example: - "Do you want mixed-price vs this item's pricing context (free or paid)?" - "Do you want category-level breakdown for where this item is strongest?" - "Do you want a 1-day movers comparison vs nearby competitors?" 2. Keep suggestions short and decision-oriented. Uncertainty and confidence rules: 1. If item is not found in requested context, state exactly which query was used. 2. If result set is empty, do not invent fallback facts. 3. If multiple similarly named items exist, ask user to confirm the exact item. 4. Never claim "live" unless data was fetched in current run. Default response structure: 1. One-line direct answer. 2. Compact evidence block (rank, 1d change, context, lastUpdated). 3. Optional "next useful question" line. ## Do / Don't Rules Do: 1. Always include the exact context used (type, period, price, category if present). 2. State `lastUpdated` when giving a conclusion. 3. Separate facts from interpretation. 4. Ask one clarifying question when item identity is ambiguous. Don't: 1. Do not invent ranks, deltas, or categories. 2. Do not compare contexts without explicit labels. 3. Do not claim "live/current" unless data was fetched in this conversation run. 4. Do not hide uncertainty. ## Terminology 1. mixed-price: `price=all` 2. pricing context: `price=free` or `price=paid` 3. default period: `lastweek` 4. historical period: `alltime` 5. global context: no category filter 6. category context: specific category slug ## Confidence Rubric 1. High: exact item match + rank + context + timestamp from current response 2. Medium: exact item match but partial context/timestamp details missing 3. Low: ambiguous item match or incomplete source evidence ## Failure Modes If API is unreachable: 1. Say endpoint is unreachable 2. Share URL attempted 3. Ask user to retry or provide response payload If item not found: 1. Say item not found in queried context 2. Show query context used 3. Suggest one adjacent query (remove category, widen search, or switch period) If multiple matches: 1. List top candidates briefly 2. Ask user to confirm exact item ## Context-Safe Comparison Rules 1. Primary comparison: same type + same period + same price + same category scope 2. Cross-context comparisons must be explicitly labeled as cross-context 3. Do not infer business performance directly from rank movement ## Response Quality Checklist Before finalizing, verify answer includes: 1. Item identity 2. Context used 3. Rank 4. 1d change (if available) 5. Last updated 6. Source URL ## Canonical Response Templates Quick answer: 1. One-line result 2. One evidence line 3. One follow-up question Deep analysis: 1. Direct answer 2. Context block 3. Movement interpretation 4. Competitive positioning 5. One recommended next question Not found / ambiguous: 1. Explicit not-found/ambiguous statement 2. Query context shown 3. One next-step question ## Canonical Examples (Output Shapes) Use these as output shape references: 1. `json`: strict key ordering per this file 2. `plain-compact`: one line per context pair 3. `plain-full`: one line per period/context 4. `unicode_table`: with preface (item, price, lastUpdated) 5. `ascii_table`: with preface (item, price, lastUpdated) ## Methods - GET: returns data - HEAD: returns headers only (no body) - OPTIONS: CORS preflight ## Query Parameters Required: - type: templates | components | creators Optional: - period: lastweek | alltime (default: lastweek) - price: all | free | paid (default: all) - category: slug (optional) - search: free text (optional) - limit: positive integer (default: 100) ## Default AI Retrieval Scope Unless user explicitly asks otherwise: 1. Use `period=lastweek` 2. Use both `price=free` and `price=paid` 3. Do not use `period=alltime` 4. Do not use `price=all` (mixed price) ## Allowed Output Formats 1. `json` 2. `plain-compact` 3. `plain-full` 4. `unicode_table` 5. `ascii_table` Default format: `unicode_table` ## Global Ordering Rules (All Formats) 1. Period order: `Last Week` then `All Time` 2. Price order inside each period: `Free` then `Paid` then `All` ## Label Rules Global scope: - `Free Templates` - `Paid Templates` - `All Templates` - `Free Components` - `Paid Components` - `All Components` Category scope: - `Free <Category> Templates|Components` - `Paid <Category> Templates|Components` - `All <Category> Templates|Components` ## Table Rules For `unicode_table` and `ascii_table`, include this preface before the table: 1. Item name 2. Item price 3. Last updated date (short month format, e.g. `Mar 8`) Required table column order: 1. `Period` 2. `Rank` 3. `1d change` 4. `Name` ## JSON Formatting Rules Top-level keys: 1. `lastUpdated` 2. `item` 3. `ranks` For each rank object, key order: 1. `period` 2. `rank` 3. `name` 4. `category` 5. `delta1d` `delta1d` object keys: 1. `symbol` 2. `value` 3. `note` ## Success Shape (200) - ok: true - schemaVersion: string - schemaUrl: string - examples: string[] - availableParams: object - lastUpdated: string | null (UTC ISO) - filters: resolved filter object - totalMatched: number - items: compact rows Each item: - id: public stable slug id - type: templates | components | creators - name: string - rank: number - delta1d: number | null - price: exact item price string or "free" | null - category: string[] for templates, string for components, null for creators - authorName: string | null - thumbnailUrl: string | null - url: string ## Error Shape (400) - ok: false - error: invalid_params - message: string - valid: enums for type/period/price - availableParams: required/optional/defaults - schemaUrl - examples ## Headers - Cache-Control: public, max-age=60, s-maxage=120, stale-while-revalidate=300 - ETag: weak etag - Last-Modified: UTC timestamp - X-RateLimit-Limit: advisory - X-RateLimit-Remaining: advisory - X-RateLimit-Reset: advisory seconds ## Caching / Polling Guidance - Prefer HEAD for freshness checks. - Use ETag + Last-Modified before pulling full payload repeatedly. ## Links - Human discovery (rendered): (inlined-on-page) - Human full docs (rendered): (inlined-on-page)
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://framer-ranks-static.pages.dev/ranks-json.schema.json",
"title": "Framer Ranks JSON API",
"oneOf": [
{
"$ref": "#/$defs/success"
},
{
"$ref": "#/$defs/error"
}
],
"$defs": {
"filters": {
"type": "object",
"required": [
"type",
"period",
"price",
"category",
"search",
"limit"
],
"properties": {
"type": {
"enum": [
"templates",
"components",
"creators"
]
},
"period": {
"enum": [
"lastweek",
"alltime"
]
},
"price": {
"enum": [
"all",
"free",
"paid"
]
},
"category": {
"type": [
"string",
"null"
]
},
"search": {
"type": "string"
},
"limit": {
"type": "integer",
"minimum": 1
}
},
"additionalProperties": false
},
"aiGuidance": {
"type": "object",
"required": [
"defaultScope",
"outputFormatting"
],
"properties": {
"defaultScope": {
"type": "object",
"required": [
"period",
"prices",
"ignore"
],
"properties": {
"period": {
"const": "lastweek"
},
"prices": {
"type": "array",
"items": {
"enum": [
"free",
"paid"
]
},
"minItems": 2,
"maxItems": 2
},
"ignore": {
"type": "array",
"items": {
"enum": [
"alltime",
"all"
]
},
"minItems": 2,
"maxItems": 2
}
},
"additionalProperties": false
},
"outputFormatting": {
"type": "object",
"required": [
"defaultFormat",
"allowedFormats",
"tablePreface"
],
"properties": {
"defaultFormat": {
"const": "unicode_table"
},
"allowedFormats": {
"type": "array",
"items": {
"enum": [
"json",
"plain-compact",
"plain-full",
"unicode_table",
"ascii_table"
]
},
"minItems": 5
},
"tablePreface": {
"type": "array",
"items": {
"enum": [
"itemName",
"itemPrice",
"lastUpdatedDate"
]
},
"minItems": 3,
"maxItems": 3
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"item": {
"type": "object",
"required": [
"id",
"type",
"name",
"rank",
"delta1d",
"price",
"category",
"authorName",
"thumbnailUrl",
"url"
],
"properties": {
"id": {
"type": "string"
},
"type": {
"enum": [
"templates",
"components",
"creators"
]
},
"name": {
"type": "string"
},
"rank": {
"type": "integer",
"minimum": 0
},
"delta1d": {
"type": [
"integer",
"null"
]
},
"price": {
"type": [
"string",
"null"
]
},
"category": {
"oneOf": [
{
"type": "null"
},
{
"type": "string"
},
{
"type": "array",
"items": {
"type": "string"
}
}
]
},
"authorName": {
"type": [
"string",
"null"
]
},
"thumbnailUrl": {
"type": [
"string",
"null"
]
},
"url": {
"type": "string"
}
},
"additionalProperties": false
},
"availableParams": {
"type": "object",
"required": [
"required",
"optional",
"defaults"
],
"properties": {
"required": {
"type": "array",
"items": {
"type": "string"
}
},
"optional": {
"type": "array",
"items": {
"type": "string"
}
},
"defaults": {
"type": "object"
}
},
"additionalProperties": true
},
"success": {
"type": "object",
"required": [
"ok",
"schemaVersion",
"schemaUrl",
"examples",
"availableParams",
"aiGuidance",
"lastUpdated",
"filters",
"totalMatched",
"items"
],
"properties": {
"ok": {
"const": true
},
"schemaVersion": {
"type": "string"
},
"schemaUrl": {
"type": "string"
},
"examples": {
"type": "array",
"items": {
"type": "string"
}
},
"availableParams": {
"$ref": "#/$defs/availableParams"
},
"aiGuidance": {
"$ref": "#/$defs/aiGuidance"
},
"lastUpdated": {
"type": [
"string",
"null"
]
},
"filters": {
"$ref": "#/$defs/filters"
},
"totalMatched": {
"type": "integer",
"minimum": 0
},
"items": {
"type": "array",
"items": {
"$ref": "#/$defs/item"
}
}
},
"additionalProperties": true
},
"error": {
"type": "object",
"required": [
"ok",
"error",
"message",
"valid",
"availableParams",
"schemaUrl",
"examples",
"aiGuidance"
],
"properties": {
"ok": {
"const": false
},
"error": {
"type": "string"
},
"message": {
"type": "string"
},
"valid": {
"type": "object",
"required": [
"type",
"period",
"price"
],
"properties": {
"type": {
"type": "array",
"items": {
"type": "string"
}
},
"period": {
"type": "array",
"items": {
"type": "string"
}
},
"price": {
"type": "array",
"items": {
"type": "string"
}
}
}
},
"availableParams": {
"$ref": "#/$defs/availableParams"
},
"schemaUrl": {
"type": "string"
},
"examples": {
"type": "array",
"items": {
"type": "string"
}
},
"aiGuidance": {
"$ref": "#/$defs/aiGuidance"
}
},
"additionalProperties": true
}
}
}