SEO and Keyword Data API
payment-ready until 2026-11-18
44 SEO and keyword data endpoints for agents and developers, paid per call over x402 (USDC on Base), $0.012 to $0.25.
Compare: all web search APIs · all geocoding APIs · all social media APIs · all SEO APIs
Call it x402 v2
x402 v2
- Base URL
- https://keywords.duoleads.com
- Payment
- x402 v2, header channel
$ curl -i 'https://keywords.duoleads.com/v1/autocomplete' An unpaid request returns HTTP 402 with the payment terms. Sign a payment authorization, then retry with the PAYMENT-SIGNATURE header.
Endpoints 44 paid routes on keywords.duoleads.com
36 more in Example 402 response
Prices as captured in the 402 response: median $0.04 across the 44 endpoints, unchanged since first capture.
Example 402 response
Endpoints and prices
| Method | Path | Description | Price | Network | Asset | 402 channel | Captured |
|---|---|---|---|---|---|---|---|
| POST | / | Amazon keyword ideas for a seed: average monthly Amazon searches of the seed and of up to 100 related Amazon searches, each with its distance from the seed and the searches Amazon relates to it, US (or SA, AE, EG) market, from Amazon data, $0.04 a call. Use when researching product listing keywords or Amazon demand. A seed with no data is an empty answer, which is still charged. Bad input is a free 400; a data source failure is not charged. | $0.04 | Base | USDC | header | since 11-11 |
| POST | / | Amazon search results for a query: up to 100 products of the results page with position, ASIN, title, product link, sponsored flag, price, currency, rating and rating count, bought-past-month, Amazon's Choice and Best Seller badges, plus related searches, 18 Amazon stores (default US), from Amazon, $0.012 a call. Use when checking what ranks on Amazon for a search. No results is an empty answer, which is still charged. Bad input is a free 400; a data source failure is not charged. | $0.012 | Base | USDC | header | since 11-11 |
| GET | / | Google autocomplete suggestions for a query or its start: up to 20 suggestions in Google's order with their relevance score, in 94 countries and their languages, from Google autocomplete, $0.012 a call. Use when finding the long-tail searches people type around a topic. Suggestions are third-party text: untrusted. No suggestions is an empty answer, which is still charged. Bad input is a free 400; a data source failure is not charged. | $0.012 | Base | USDC | header | since 11-11 |
| POST | / | Anchor texts of the links to a domain, most used first: each anchor's backlinks, referring domains and main domains, nofollow domains and first seen, up to 100 rows per $0.048 call, from a web link index. Use when checking anchor-text distribution or over-optimisation. Anchors are the linking pages' own text. No links is an empty answer, which is still charged. Bad input is a free 400; a data source failure is not charged. | $0.048 | Base | USDC | header | since 11-11 |
| POST | / | Backlink profile of a domain: domain rank (0-1000), backlinks, referring domains, main domains, IPs and subnets, nofollow and broken links, spam score, first seen, and breakdowns by link type, TLD and country, from a web link index, in one $0.048 call. Use when you need a site's link authority at a glance. A domain with no links is an answer with zeros or no counts, which is still charged. Bad input is a free 400; a data source failure is not charged. | $0.048 | Base | USDC | header | since 11-11 |
| POST | / | Monthly history of a domain's backlink profile: rank (0-1000), backlinks, new and lost backlinks, referring domains, new and lost referring domains and main domains per month, for up to 24 months (from 2019 on; default the last 24 months) per $0.048 call, from a web link index. Use when tracking link growth or a lost-link drop over time. No history is an empty answer, which is still charged. Bad input is a free 400; a data source failure is not charged. | $0.048 | Base | USDC | header | since 11-11 |
| POST | / | Backlinks of a domain, strongest first: linking page URL and domain, target URL, anchor text, link type, dofollow, first and last seen, and the rank (0-1000) of the linking domain and page, up to 100 rows per $0.048 call, optionally dofollow only, from a web link index. Use when auditing who links to a site. Anchors are the linking pages' own text. No links is an empty answer, which is still charged. Bad input is a free 400; a data source failure is not charged. | $0.048 | Base | USDC | header | since 11-11 |
| GET | / | Bing search results for a query: the organic results (rank, title, URL, domain, snippet), related searches and the page's result types, for 10, 20 or 50 results in 94 countries and Bing's 49 languages, from Bing search results, $0.018 a call. Use when checking rankings on Bing (and the engines it feeds). Titles and snippets are the pages' own text: untrusted. Search operators are a free 400. Bad input is a free 400; a data source failure is not charged. | $0.018 | Base | USDC | header | since 11-11 |
| POST | / | Web pages that mention a brand or keyword: up to 100 with URL, domain, date, sentiment (positive / negative / neutral with scores), the page's rating, page type, country, language and domain / page rank (no snippets or authors), from a web content index, $0.048 a call. Use when monitoring brand mentions or finding PR and link prospects. No mention is an empty answer, still charged. Bad input is a free 400; a data source failure is not charged. | $0.048 | Base | USDC | header | since 11-11 |
| POST | / | Businesses listed on Google Maps by name and/or category in a country, optionally within a radius of a point: up to 50 with name, category, address, phone, website, rating, review count, coordinates, price level and place id (no reviews or photos), from Google Maps business listings, $0.08 a call. Use when building local lead lists or auditing a market. No match is an empty answer, still charged. Bad input is a free 400; a data source failure is not charged. | $0.08 | Base | USDC | header | since 11-11 |
| POST | / | Search volume estimated from clickstream data (real user search behaviour, not Google Ads ranges) for up to 100 keywords: average monthly searches and optional 12-month history, in 94 countries, from clickstream panel data, $0.04 a call. Use when Google Ads volumes look bucketed or you want a second estimate. Keywords under 3 characters are listed in missing. Bad input is a free 400; a data source failure is not charged. | $0.04 | Base | USDC | header | since 11-11 |
| POST | / | Competitor domains: the websites competing with a domain in Google organic search, each with the keywords both rank for, the average position on them, and the competitor's total ranking keywords and estimated traffic; up to 100 in one $0.048 call. Use when you need to find a site's real SEO competitors (bare domain; www. is dropped). No data returns empty results (still charged). Bad input is free; upstream errors are not charged. | $0.048 | Base | USDC | header | since 11-11 |
| POST | / | Domain overview: a domain's Google SEO footprint in one market: organic and paid ranking keywords, estimated monthly traffic (etv) and its ad value, and keywords in position 1, top 3, top 10 and top 100, in one $0.04 call. Use when you need a quick SEO size-up of a website or competitor (bare domain; www. is dropped). A domain with no data gives found false (still charged). Bad input is free; upstream errors are not charged. | $0.04 | Base | USDC | header | since 11-11 |
| POST | / | Google Ads keyword ideas for up to 20 seed keywords: up to 100 ideas, highest search volume first, with monthly volume, CPC, competition and top-of-page bid range (optional monthly history), in 94 countries, from Google Ads data, $0.16 a call. Use when planning a paid or SEO keyword list from Google's own planner. Over the source's 12 calls a minute: a free 503 with Retry-After. Bad input is a free 400; a data source failure is not charged. | $0.16 | Base | USDC | header | since 11-11 |
| POST | / | Historical rank: a domain's monthly Google visibility over the last 24 months: organic and paid ranking keywords, estimated traffic (etv), its ad value and position 1 / top 3 / top 10 / top 100 counts per month, in one $0.25 call. Use when you need a site's SEO trajectory, traffic drops or recoveries (bare domain; www. is dropped). A domain with no data returns an empty series (still charged). Bad input is free; upstream errors are not charged. | $0.25 | Base | USDC | header | since 11-11 |
| GET | / | Google Trends interest by region for one keyword: 0-100 interest per subregion of a country (or per country worldwide), past 7 days to 5 years, in one $0.03 GET. Use when you need where a keyword is searched most, for geo-targeting or local market research. A live call takes up to about 30 s. Bad input is free; upstream errors are not charged. Too little Google data gives an empty answer, which is still charged. | $0.03 | Base | USDC | header | since 11-11 |
| POST | / | Keyword difficulty (0-100: how hard it is to rank in Google's top 10) for up to 100 keywords in one $0.04 call. Use when you need to prioritise keywords by ranking difficulty. Keywords are normalised to lower case; over 100 keywords is a free 400. Keywords without a score are listed in missing (still charged). Bad input is free; upstream errors are not charged. | $0.04 | Base | USDC | header | since 11-11 |
| POST | / | Keyword gap: the Google keywords a competitor ranks for and your domain does not, each with the competitor's position, URL and estimated traffic plus search volume, CPC, difficulty and intent; up to 100 in one $0.048 call. Use when you need content gaps and keyword opportunities (bare domains; www. is dropped). No gap returns empty results (still charged). Bad input is free; upstream errors are not charged. | $0.048 | Base | USDC | header | since 11-11 |
| POST | / | Keyword ideas for a seed keyword, each with Google search volume, CPC, competition, keyword difficulty and search intent; up to 100 ideas in one $0.04 call (Google Ads data). Use when you need related keywords to target. volume = avg monthly searches, cpc in USD, competition 0-1, difficulty 0-100. No ideas returns empty results (still charged). Bad input is free; upstream errors are not charged. | $0.04 | Base | USDC | header | since 11-11 |
| POST | / | Search volume, CPC, competition, keyword difficulty and search intent for up to 100 keywords in one $0.04 call (Google Ads data). Use when you already have a keyword list to prioritise. volume = avg monthly searches, cpc in USD, competition 0-1, difficulty 0-100. Keywords without data are left out of results and listed in missing (still charged). Bad input is free; upstream errors are not charged. | $0.04 | Base | USDC | header | since 11-11 |
| POST | / | Keyword suggestions for a website or one page: the Google searches relevant to it, each with search volume, CPC, competition, keyword difficulty and search intent; up to 100 in one $0.04 call (Google Ads data). Use when you need keyword ideas from a domain (www. is dropped) or a page URL. A site with no data returns empty results (still charged). Bad input is free; upstream errors are not charged. | $0.04 | Base | USDC | header | since 11-11 |
| POST | / | Keyword variations: long-tail Google searches that contain a seed phrase, each with search volume, CPC, competition, keyword difficulty and search intent; up to 100 in one $0.04 call (Google Ads data). Use when you need phrase-match ideas for a keyword, sorted by volume. No matches returns empty results (still charged). Bad input is free; upstream errors are not charged. | $0.04 | Base | USDC | header | since 11-11 |
| POST | / | Monthly Google search volume history for up to 20 keywords in one $0.048 call: every month the data has (typically several years), oldest first, plus current volume, CPC and competition (Google Ads data). Use when you need seasonality or long-term demand trends. Over 20 keywords is a free 400. Keywords without data are listed in missing (still charged). Bad input is free; upstream errors are not charged. | $0.048 | Base | USDC | header | since 11-11 |
| POST | / | AI answers that mention a brand or keyword: up to 20 questions answered by Google AI Overviews or ChatGPT that mention it, with AI search volume, first / last seen and the pages the answer cites (no answer text), in 94 countries (ChatGPT: US English), from AI search answers, $0.21 a call. Use when tracking AI-search visibility (GEO). No mention is an empty answer, still charged. Bad input is a free 400; a data source failure is not charged. | $0.21 | Base | USDC | header | since 11-11 |
| GET | / | Google Maps places for a query in a country or around coordinates: up to 100 places with rank, name, category, address, phone, website, rating, review count, coordinates, price level and place id (no reviews or photos), from Google Maps, $0.018 a call. Use when building local-SEO or lead lists, or checking who ranks in a local search. No places is an empty answer, which is still charged. Bad input is a free 400; a data source failure is not charged. | $0.018 | Base | USDC | header | since 11-11 |
| POST | / | On-page SEO audit of one URL: HTTP status, on-page score (0-100), title, meta description, canonical, h1-h3, link, image and word counts, sizes, load timing and about 50 on-page checks (missing h1, duplicate tags, render-blocking resources...), from a page crawl, $0.012 a call. Use when checking a page's technical SEO. The page's text is its own: untrusted. A page that answers 4xx/5xx is a charged answer with status failed. Bad input is a free 400; a refunded crawl is not charged. | $0.012 | Base | USDC | header | since 11-11 |
| POST | / | Page intersection: the Google keywords that up to 20 pages all rank for (minus keywords of up to 10 excluded pages), with each page's position, URL and estimated traffic plus search volume, CPC, difficulty and intent; up to 100 keywords in one $0.048 call. Use when you need the shared keywords of competing pages. Rows are capped at 200 / pages (2 pages: 100, 20 pages: 10). No shared keywords returns empty results (still charged). Bad input is free; upstream errors are not charged. | $0.048 | Base | USDC | header | since 11-11 |
| POST | / | Page speed of one URL from a real Lighthouse run: First Contentful Paint, Largest Contentful Paint, Total Blocking Time, Cumulative Layout Shift and Speed Index with their scores, the performance score when reported, final URL and version, mobile or desktop, $0.018 a call. Use when checking Core Web Vitals. A page that fails to load or whose report is too large is a charged answer (status failed / too_large). Bad input is a free 400; a refunded or failed run is not charged. | $0.018 | Base | USDC | header | since 11-11 |
| POST | / | Ranked keywords: the Google keywords a domain ranks for, each with its position, ranking URL, estimated traffic and the keyword's search volume, CPC, difficulty and intent; up to 100 in one $0.048 call. Use when you need a site's or competitor's organic keywords (bare domain; www. is dropped). A domain with no data returns empty results (still charged). Bad input is free; upstream errors are not charged. | $0.048 | Base | USDC | header | since 11-11 |
| POST | / | Domains linking to a domain, strongest first: each referring domain's rank (0-1000), backlinks and linking pages to the target, nofollow and broken links, first seen and spam score, up to 100 rows per $0.048 call, from a web link index. Use when sizing or comparing a site's link sources. No links is an empty answer, which is still charged. Bad input is a free 400; a data source failure is not charged. | $0.048 | Base | USDC | header | since 11-11 |
| POST | / | Related keywords for a seed from Google's 'searches related to' graph, to a depth of 0-4, each with search volume, CPC, competition, keyword difficulty and search intent; up to 100 in one $0.04 call (Google Ads data). Use when you need topic clusters around a keyword. Each row has its depth and the further related searches. No matches returns empty results (still charged). Bad input is free; upstream errors are not charged. | $0.04 | Base | USDC | header | since 11-11 |
| GET | / | Google Trends related queries for one keyword: the top related searches (0-100) and the rising ones (% growth), for a country or worldwide, past 7 days to 5 years, in one $0.03 GET. Use when you need query expansion, content ideas or emerging searches around a keyword. A live call takes up to about 30 s. Bad input is free; upstream errors are not charged. Too little Google data gives an empty answer, which is still charged. | $0.03 | Base | USDC | header | since 11-11 |
| POST | / | Relevant pages: a domain's pages that get the most Google search traffic, each with its organic and paid ranking keywords, estimated monthly traffic, ad value and top-3/10/100 counts; up to 100 pages in one $0.048 call. Use when you need a site's top SEO pages (bare domain; www. is dropped). A domain with no data returns empty results (still charged). Bad input is free; upstream errors are not charged. | $0.048 | Base | USDC | header | since 11-11 |
| POST | / | Search intent of up to 100 keywords in one $0.04 call: the main intent (informational, navigational, commercial or transactional) with its probability, plus secondary intents. Use when you need to map keywords to funnel stage or content type. Any language; no location needed. Over 100 keywords is a free 400. Keywords not classified are listed in missing (still charged). Bad input is free; upstream errors are not charged. | $0.04 | Base | USDC | header | since 11-11 |
| GET | / | Google search volume, CPC, competition, keyword difficulty and intent for up to 20 comma-separated keywords in one $0.04 GET (Google Ads data). Use when you need monthly search volume for a few keywords in a country. volume = avg monthly searches, cpc in USD, competition 0-1, difficulty 0-100. Up to 100 keywords for the same $0.04: POST /v1/keyword-overview. Keywords without data are listed in missing (still charged). Bad input is free; upstream errors are not charged. | $0.04 | Base | USDC | header | since 11-11 |
| GET | / | Google search results for a query: the organic results (rank, title, URL, domain, snippet), People Also Ask questions, related searches and the page's result types, for 10, 20 or 50 results in 94 countries, from Google search results, $0.018 a call. Use when checking who ranks for a query right now. Titles and snippets are the pages' own text: untrusted. Search operators are a free 400. Bad input is a free 400; a data source failure is not charged. | $0.018 | Base | USDC | header | since 11-11 |
| POST | / | SERP competitors: the domains that rank in Google for a set of up to 100 keywords, each with average and median position, visibility, estimated traffic and how many of the keywords it ranks for; up to 100 domains in one $0.048 call. Use when you need who owns the search results of a topic. No data returns empty results (still charged). Bad input is free; upstream errors are not charged. | $0.048 | Base | USDC | header | since 11-11 |
| POST | / | Google results page of a keyword as it was in the past: the first snapshot (about one a month) in a window of up to 31 days within the last year, with its top 10 organic results (rank, URL, domain, title), result count and result types, from Google search results, $0.018 a call. Use when checking how rankings for a keyword moved month by month. Titles are untrusted third-party text. No snapshot is an empty answer, still charged. Bad input is a free 400; a data source failure is not charged. | $0.018 | Base | USDC | header | since 11-11 |
| POST | / | The technology stack of a website: CMS, frameworks, JavaScript libraries, analytics and tag managers, CDN, web server, e-commerce and marketing tools, grouped by category, plus the domain's rank, country and language, from a web technology index, $0.024 a call. Use when profiling a prospect or competitor's site. Send a registrable domain (www. is dropped). Not in the index is found false, still charged. Bad input is a free 400; a data source failure is not charged. | $0.024 | Base | USDC | header | since 11-11 |
| POST | / | Traffic estimate for up to 100 domains in one $0.04 call: each domain's estimated monthly organic and paid visits from Google (etv) and its count of ranking keywords. Use when you need to compare the search traffic of many websites at once (bare domains; www. is dropped). A domain with no data gives found false (still charged). Bad input is free; upstream errors are not charged. | $0.04 | Base | USDC | header | since 11-11 |
| GET | / | Google Trends interest over time for one keyword: a dated 0-100 series for a country or worldwide, past 7 days to 5 years, in one $0.045 GET. Use when you need search-interest trends, seasonality or demand direction for a keyword. Daily points for short windows, weekly for 12 months. A live call takes up to about 30 s. Bad input is free; upstream errors are not charged. Too little Google data gives an empty answer, which is still charged. | $0.045 | Base | USDC | header | since 11-11 |
| POST | / | Google Trends comparison of up to 5 keywords: one relative 0-100 interest series for all of them (same scale), with each keyword's average and latest value; worldwide or one country, 7 days to 5 years, web, news or YouTube search, in one $0.045 call. Use when you need to compare demand or seasonality between terms. A live call takes up to about 30 s. Too little data gives found false (still charged). Bad input is free; upstream errors are not charged. | $0.045 | Base | USDC | header | since 11-11 |
| POST | / | WHOIS overview of a domain: registered or not, registrar, creation, update and expiry dates, EPP status codes and TLD, plus its Google ranking keywords, estimated traffic and backlink counts (no registrant personal data), from WHOIS records, $0.21 a call. Use when checking a domain's age, owner registrar or expiry. Send a registrable domain (www. is dropped). Not in the index is found false, still charged. Bad input is a free 400; a data source failure is not charged. | $0.21 | Base | USDC | header | since 11-11 |
| GET | / | YouTube search results for a query: up to 20 or 40 videos with rank, video id and link, title, channel name and id, views, publication date and duration, in 94 countries, from YouTube search results, $0.012 a call. Use when checking which videos rank on YouTube for a topic. Titles and channel names are third-party text: untrusted; no comments. No results is an empty answer, which is still charged. Bad input is a free 400; a data source failure is not charged. | $0.012 | Base | USDC | header | since 11-11 |
Payment evidence
402 payload captured at . Check evidence JSON · Measurement methodology.
First of 44 payloads captured by the monitor.
168 lines, scroll inside
{
"error": "Payment required",
"accepts": [
{
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"extra": {
"name": "USD Coin",
"version": "2"
},
"payTo": "0xCD673f7e1daD254347AEab6be0DEFe8b9C6b3A39",
"amount": "45000",
"scheme": "exact",
"network": "eip155:8453",
"maxTimeoutSeconds": 120
}
],
"resource": {
"url": "https://keywords.duoleads.com/v1/trend",
"tags": [
"google-trends",
"interest-over-time",
"trends",
"seo",
"search-trends"
],
"iconUrl": "https://keywords.duoleads.com/logo.png",
"mimeType": "application/json",
"description": "Google Trends interest over time for one keyword: a dated 0-100 series for a country or worldwide, past 7 days to 5 years, in one $0.045 GET. Use when you need search-interest trends, seasonality or demand direction for a keyword. Daily points for short windows, weekly for 12 months. A live call takes up to about 30 s. Bad input is free; upstream errors are not charged. Too little Google data gives an empty answer, which is still charged.",
"serviceName": "Google Trends Interest Over Time"
},
"extensions": {
"bazaar": {
"info": {
"input": {
"type": "http",
"method": "GET",
"queryParams": {
"country": "us",
"keyword": "seo tools",
"timeframe": "past_12_months"
}
},
"output": {
"type": "json",
"example": {
"units": "value: Google Trends interest, 0-100 relative to the peak of the period (100 = peak, 0 = too little data); partial: the period is not complete yet",
"market": {
"country": "US",
"locationCode": 2840,
"locationName": "United States"
},
"series": [
{
"date": "2025-10-05",
"value": 62
},
{
"date": "2025-10-12",
"value": 45
},
{
"date": "2025-10-19",
"value": 41
},
{
"date": "2026-10-11",
"value": 11,
"partial": true
}
],
"source": "Google Trends",
"country": "US",
"keyword": "seo tools",
"dataAsOf": "2026-10-11T19:24:11Z",
"see_also": {
"params": [
"keyword",
"country",
"timeframe"
],
"reason": "Want the top and rising searches related to this keyword? Call related-queries with the same parameters.",
"endpoint": "https://keywords.duoleads.com/v1/related-queries"
},
"timeframe": "past_12_months",
"queried_at": "2026-10-11T19:24:11Z",
"request_id": "01KEXAMPLE0000000000000000",
"granularity": "week"
}
}
},
"schema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"input"
],
"properties": {
"input": {
"type": "object",
"required": [
"type",
"method"
],
"properties": {
"type": {
"type": "string",
"const": "http"
},
"method": {
"enum": [
"GET"
],
"type": "string"
},
"queryParams": {
"type": "object",
"required": [
"keyword"
],
"properties": {
"country": {
"type": "string",
"pattern": "^[A-Za-z]{2}$",
"description": "ISO 3166-1 alpha-2 country code (us, gb, de, ...; uk = gb). Omit for worldwide."
},
"keyword": {
"type": "string",
"maxLength": 100,
"minLength": 2,
"description": "One keyword or phrase (2-100 characters, no commas)."
},
"timeframe": {
"enum": [
"past_7_days",
"past_30_days",
"past_90_days",
"past_12_months",
"past_5_years"
],
"type": "string",
"default": "past_12_months",
"description": "Time window. Default past_12_months."
}
}
}
},
"additionalProperties": false
},
"output": {
"type": "object",
"required": [
"type"
],
"properties": {
"type": {
"type": "string"
},
"example": {
"type": "object"
}
}
}
}
}
}
},
"x402Version": 2
} Other captured 402 responses (43)
Captured payload 2 of 44
{
"error": "Payment required",
"accepts": [
{
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"extra": {
"name": "USD Coin",
"version": "2"
},
"payTo": "0xCD673f7e1daD254347AEab6be0DEFe8b9C6b3A39",
"amount": "30000",
"scheme": "exact",
"network": "eip155:8453",
"maxTimeoutSeconds": 120
}
],
"resource": {
"url": "https://keywords.duoleads.com/v1/related-queries",
"tags": [
"google-trends",
"related-queries",
"keyword-research",
"seo",
"search-trends"
],
"iconUrl": "https://keywords.duoleads.com/logo.png",
"mimeType": "application/json",
"description": "Google Trends related queries for one keyword: the top related searches (0-100) and the rising ones (% growth), for a country or worldwide, past 7 days to 5 years, in one $0.03 GET. Use when you need query expansion, content ideas or emerging searches around a keyword. A live call takes up to about 30 s. Bad input is free; upstream errors are not charged. Too little Google data gives an empty answer, which is still charged.",
"serviceName": "Google Trends Related Queries"
},
"extensions": {
"bazaar": {
"info": {
"input": {
"type": "http",
"method": "GET",
"queryParams": {
"country": "us",
"keyword": "seo api",
"timeframe": "past_12_months"
}
},
"output": {
"type": "json",
"example": {
"top": [
{
"term": "analytics seo api",
"value": 100
},
{
"term": "moz api",
"value": 64
}
],
"units": "top value: 0-100 relative popularity among related queries (100 = most searched); rising value: % increase in searches vs the preceding period",
"market": {
"country": "US",
"locationCode": 2840,
"locationName": "United States"
},
"rising": [],
"source": "Google Trends",
"country": "US",
"keyword": "seo api",
"dataAsOf": "2022-04-21T18:40:17Z",
"see_also": {
"params": [
"keyword",
"country",
"timeframe"
],
"reason": "Need the interest-over-time series for this keyword? Call trend with the same parameters.",
"endpoint": "https://keywords.duoleads.com/v1/trend"
},
"timeframe": "past_12_months",
"queried_at": "2022-04-21T18:40:17Z",
"request_id": "01KEXAMPLE0000000000000000"
}
}
},
"schema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"input"
],
"properties": {
"input": {
"type": "object",
"required": [
"type",
"method"
],
"properties": {
"type": {
"type": "string",
"const": "http"
},
"method": {
"enum": [
"GET"
],
"type": "string"
},
"queryParams": {
"type": "object",
"required": [
"keyword"
],
"properties": {
"country": {
"type": "string",
"pattern": "^[A-Za-z]{2}$",
"description": "ISO 3166-1 alpha-2 country code (us, gb, de, ...; uk = gb). Omit for worldwide."
},
"keyword": {
"type": "string",
"maxLength": 100,
"minLength": 2,
"description": "One keyword or phrase (2-100 characters, no commas)."
},
"timeframe": {
"enum": [
"past_7_days",
"past_30_days",
"past_90_days",
"past_12_months",
"past_5_years"
],
"type": "string",
"default": "past_12_months",
"description": "Time window. Default past_12_months."
}
}
}
},
"additionalProperties": false
},
"output": {
"type": "object",
"required": [
"type"
],
"properties": {
"type": {
"type": "string"
},
"example": {
"type": "object"
}
}
}
}
}
}
},
"x402Version": 2
}Captured payload 3 of 44
{
"error": "Payment required",
"accepts": [
{
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"extra": {
"name": "USD Coin",
"version": "2"
},
"payTo": "0xCD673f7e1daD254347AEab6be0DEFe8b9C6b3A39",
"amount": "40000",
"scheme": "exact",
"network": "eip155:8453",
"maxTimeoutSeconds": 120
}
],
"resource": {
"url": "https://keywords.duoleads.com/v1/keyword-overview",
"tags": [
"keyword-overview",
"search-volume",
"keyword-research",
"seo",
"cpc"
],
"iconUrl": "https://keywords.duoleads.com/logo.png",
"mimeType": "application/json",
"description": "Search volume, CPC, competition, keyword difficulty and search intent for up to 100 keywords in one $0.04 call (Google Ads data). Use when you already have a keyword list to prioritise. volume = avg monthly searches, cpc in USD, competition 0-1, difficulty 0-100. Keywords without data are left out of results and listed in missing (still charged). Bad input is free; upstream errors are not charged.",
"serviceName": "SEO Keyword Overview and Volume"
},
"extensions": {
"bazaar": {
"info": {
"input": {
"body": {
"keywords": [
"phone",
"watch"
],
"languageCode": "en",
"locationCode": 2840
},
"type": "http",
"method": "POST",
"bodyType": "json"
},
"output": {
"type": "json",
"example": {
"total": 2,
"units": "volume: average monthly Google searches; cpc: US dollars; competition: 0-1 (Google Ads); competitionLevel: LOW|MEDIUM|HIGH; difficulty: 0-100; intent: informational|navigational|commercial|transactional; trendYoyPct: % change vs a year ago",
"market": {
"country": "US",
"fallback": false,
"languageCode": "en",
"locationCode": 2840,
"locationName": "United States"
},
"source": "Google Ads data",
"missing": [],
"results": [
{
"cpc": 4.63,
"intent": "informational",
"volume": 673000,
"keyword": "phone",
"difficulty": 54,
"competition": 0.76,
"trendYoyPct": 50,
"competitionLevel": "HIGH"
},
{
"cpc": 1.39,
"intent": "transactional",
"volume": 550000,
"keyword": "watch",
"difficulty": 54,
"competition": 0.95,
"trendYoyPct": 22,
"competitionLevel": "HIGH"
}
],
"dataAsOf": "2026-09-16T03:19:59Z",
"see_also": {
"params": [
"keywords",
"country",
"lang"
],
"reason": "Prefer a GET? search-volume returns the same fields for up to 20 comma-separated keywords.",
"endpoint": "https://keywords.duoleads.com/v1/search-volume"
},
"request_id": "01KEXAMPLE0000000000000000"
}
}
},
"schema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"input"
],
"properties": {
"input": {
"type": "object",
"required": [
"type",
"method",
"bodyType",
"body"
],
"properties": {
"body": {
"type": "object",
"required": [
"keywords"
],
"properties": {
"country": {
"type": "string",
"description": "Optional ISO 3166-1 alpha-2 code or country name, used when locationCode is absent (uk = gb)."
},
"keywords": {
"type": "array",
"items": {
"type": "string",
"maxLength": 80,
"minLength": 1
},
"maxItems": 100,
"minItems": 1,
"description": "Keywords to look up (1-100; each at most 80 characters). Whitespace and control characters are normalised to single spaces and keywords to lower case; a keyword that is then empty, over 10 words or over 80 characters is not looked up and is listed in missing, and a request with no keyword left to look up is a free 400 (the one exception to openverbs schema compatibility)."
},
"languageCode": {
"type": "string",
"description": "Language code (2-letter). Defaults to en. An unsupported location falls back to 2840 (United States) with en (or the requested language if the United States offers it); a supported location with a language it does not offer uses that location's default language (en if offered). Either way market.fallback is true and market.warnings says what was used."
},
"locationCode": {
"type": "integer",
"description": "Google Ads location code (geo target ID). Defaults to 2840 (United States); an unsupported code falls back to 2840 (United States, market.fallback)."
},
"includeMonthly": {
"type": "boolean",
"description": "Add each keyword's monthly search volumes (monthly[])."
}
}
},
"type": {
"type": "string",
"const": "http"
},
"method": {
"enum": [
"POST"
],
"type": "string"
},
"bodyType": {
"enum": [
"json",
"form-data",
"text"
],
"type": "string"
}
},
"additionalProperties": false
},
"output": {
"type": "object",
"required": [
"type"
],
"properties": {
"type": {
"type": "string"
},
"example": {
"type": "object"
}
}
}
}
}
}
},
"x402Version": 2
}Captured payload 4 of 44
{
"error": "Payment required",
"accepts": [
{
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"extra": {
"name": "USD Coin",
"version": "2"
},
"payTo": "0xCD673f7e1daD254347AEab6be0DEFe8b9C6b3A39",
"amount": "40000",
"scheme": "exact",
"network": "eip155:8453",
"maxTimeoutSeconds": 120
}
],
"resource": {
"url": "https://keywords.duoleads.com/v1/search-volume",
"tags": [
"search-volume",
"keyword-research",
"seo",
"cpc",
"keyword-difficulty"
],
"iconUrl": "https://keywords.duoleads.com/logo.png",
"mimeType": "application/json",
"description": "Google search volume, CPC, competition, keyword difficulty and intent for up to 20 comma-separated keywords in one $0.04 GET (Google Ads data). Use when you need monthly search volume for a few keywords in a country. volume = avg monthly searches, cpc in USD, competition 0-1, difficulty 0-100. Up to 100 keywords for the same $0.04: POST /v1/keyword-overview. Keywords without data are listed in missing (still charged). Bad input is free; upstream errors are not charged.",
"serviceName": "SEO Keyword Search Volume, CPC"
},
"extensions": {
"bazaar": {
"info": {
"input": {
"type": "http",
"method": "GET",
"queryParams": {
"lang": "en",
"country": "us",
"keywords": "phone,watch"
}
},
"output": {
"type": "json",
"example": {
"total": 2,
"units": "volume: average monthly Google searches; cpc: US dollars; competition: 0-1 (Google Ads); competitionLevel: LOW|MEDIUM|HIGH; difficulty: 0-100; intent: informational|navigational|commercial|transactional; trendYoyPct: % change vs a year ago",
"market": {
"country": "US",
"fallback": false,
"languageCode": "en",
"locationCode": 2840,
"locationName": "United States"
},
"source": "Google Ads data",
"missing": [],
"results": [
{
"cpc": 4.63,
"intent": "informational",
"volume": 673000,
"keyword": "phone",
"difficulty": 54,
"competition": 0.76,
"trendYoyPct": 50,
"competitionLevel": "HIGH"
},
{
"cpc": 1.39,
"intent": "transactional",
"volume": 550000,
"keyword": "watch",
"difficulty": 54,
"competition": 0.95,
"trendYoyPct": 22,
"competitionLevel": "HIGH"
}
],
"dataAsOf": "2026-09-16T03:19:59Z",
"see_also": {
"params": [
"keywords",
"locationCode",
"languageCode"
],
"reason": "More than 20 keywords? POST up to 100 to keyword-overview: the same fields in one $0.04 call.",
"endpoint": "https://keywords.duoleads.com/v1/keyword-overview"
},
"request_id": "01KEXAMPLE0000000000000000"
}
}
},
"schema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"input"
],
"properties": {
"input": {
"type": "object",
"required": [
"type",
"method"
],
"properties": {
"type": {
"type": "string",
"const": "http"
},
"method": {
"enum": [
"GET"
],
"type": "string"
},
"queryParams": {
"type": "object",
"required": [
"keywords"
],
"properties": {
"lang": {
"type": "string",
"pattern": "^[A-Za-z]{2,3}([-_][A-Za-z0-9]{2,8})*$",
"maxLength": 16,
"description": "Language code offered for the country (en, es, de, ...; en-US = en). Default: en when offered, else the country's main language."
},
"country": {
"type": "string",
"default": "us",
"pattern": "^[A-Za-z]{2}$",
"description": "ISO 3166-1 alpha-2 country code of a supported location (us, gb, de, ...; uk = gb). Default us."
},
"keywords": {
"type": "string",
"maxLength": 2000,
"minLength": 1,
"description": "1-20 keywords, comma-separated (empty segments are ignored); each at most 80 characters. Whitespace and control characters are normalised to single spaces and keywords to lower case; a keyword that is then empty, over 10 words or over 80 characters is not looked up and is listed in missing; none left to look up is a free 400."
},
"includeMonthly": {
"enum": [
"true",
"false"
],
"type": "string",
"description": "true adds each keyword's monthly search volumes."
}
}
}
},
"additionalProperties": false
},
"output": {
"type": "object",
"required": [
"type"
],
"properties": {
"type": {
"type": "string"
},
"example": {
"type": "object"
}
}
}
}
}
}
},
"x402Version": 2
}Captured payload 5 of 44
{
"error": "Payment required",
"accepts": [
{
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"extra": {
"name": "USD Coin",
"version": "2"
},
"payTo": "0xCD673f7e1daD254347AEab6be0DEFe8b9C6b3A39",
"amount": "40000",
"scheme": "exact",
"network": "eip155:8453",
"maxTimeoutSeconds": 120
}
],
"resource": {
"url": "https://keywords.duoleads.com/v1/keyword-ideas",
"tags": [
"keyword-ideas",
"keyword-research",
"seo",
"search-volume",
"keyword-difficulty"
],
"iconUrl": "https://keywords.duoleads.com/logo.png",
"mimeType": "application/json",
"description": "Keyword ideas for a seed keyword, each with Google search volume, CPC, competition, keyword difficulty and search intent; up to 100 ideas in one $0.04 call (Google Ads data). Use when you need related keywords to target. volume = avg monthly searches, cpc in USD, competition 0-1, difficulty 0-100. No ideas returns empty results (still charged). Bad input is free; upstream errors are not charged.",
"serviceName": "SEO Keyword Ideas and Difficulty"
},
"extensions": {
"bazaar": {
"info": {
"input": {
"body": {
"limit": 2,
"keyword": "phone",
"languageCode": "en",
"locationCode": 2840
},
"type": "http",
"method": "POST",
"bodyType": "json"
},
"output": {
"type": "json",
"example": {
"seed": "phone",
"total": 2,
"units": "volume: average monthly Google searches; cpc: US dollars; competition: 0-1 (Google Ads); competitionLevel: LOW|MEDIUM|HIGH; difficulty: 0-100; intent: informational|navigational|commercial|transactional; trendYoyPct: % change vs a year ago",
"market": {
"country": "US",
"fallback": false,
"languageCode": "en",
"locationCode": 2840,
"locationName": "United States"
},
"source": "Google Ads data",
"results": [
{
"cpc": 0.31,
"intent": "informational",
"volume": 165000,
"keyword": "nothing phone",
"difficulty": 31,
"competition": 0.92,
"trendYoyPct": 174,
"competitionLevel": "HIGH"
},
{
"cpc": 2.14,
"intent": "informational",
"volume": 14800,
"keyword": "find phone",
"difficulty": 57,
"competition": 0.1,
"trendYoyPct": 22,
"competitionLevel": "LOW"
}
],
"dataAsOf": "2026-09-13T09:55:39Z",
"see_also": {
"params": [
"keyword",
"country",
"timeframe"
],
"reason": "Want the seasonality of an idea? Call trend for its Google Trends interest over time.",
"endpoint": "https://keywords.duoleads.com/v1/trend"
},
"available": 425645,
"request_id": "01KEXAMPLE0000000000000000"
}
}
},
"schema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"input"
],
"properties": {
"input": {
"type": "object",
"required": [
"type",
"method",
"bodyType",
"body"
],
"properties": {
"body": {
"type": "object",
"required": [
"keyword"
],
"properties": {
"limit": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"description": "Maximum ideas to return. Defaults to 20."
},
"country": {
"type": "string",
"description": "Optional ISO 3166-1 alpha-2 code or country name, used when locationCode is absent (uk = gb)."
},
"keyword": {
"type": "string",
"maxLength": 80,
"minLength": 1,
"description": "Seed keyword to expand (at most 80 characters). Whitespace and control characters are normalised to single spaces and the seed to lower case; only a seed of 1 to 10 words and at most 80 characters can be expanded, so a seed that is then empty or longer is a free 400."
},
"languageCode": {
"type": "string",
"description": "Language code (2-letter). Defaults to en. An unsupported location falls back to 2840 (United States) with en (or the requested language if the United States offers it); a supported location with a language it does not offer uses that location's default language (en if offered). Either way market.fallback is true and market.warnings says what was used."
},
"locationCode": {
"type": "integer",
"description": "Google Ads location code (geo target ID). Defaults to 2840 (United States); an unsupported code falls back to 2840 (United States, market.fallback)."
},
"includeMonthly": {
"type": "boolean",
"description": "Add each idea's monthly search volumes (monthly[])."
}
}
},
"type": {
"type": "string",
"const": "http"
},
"method": {
"enum": [
"POST"
],
"type": "string"
},
"bodyType": {
"enum": [
"json",
"form-data",
"text"
],
"type": "string"
}
},
"additionalProperties": false
},
"output": {
"type": "object",
"required": [
"type"
],
"properties": {
"type": {
"type": "string"
},
"example": {
"type": "object"
}
}
}
}
}
}
},
"x402Version": 2
}Captured payload 6 of 44
{
"error": "Payment required",
"accepts": [
{
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"extra": {
"name": "USD Coin",
"version": "2"
},
"payTo": "0xCD673f7e1daD254347AEab6be0DEFe8b9C6b3A39",
"amount": "30000",
"scheme": "exact",
"network": "eip155:8453",
"maxTimeoutSeconds": 120
}
],
"resource": {
"url": "https://keywords.duoleads.com/v1/interest-by-region",
"tags": [
"google-trends",
"interest-by-region",
"keyword-research",
"seo",
"geo-targeting"
],
"iconUrl": "https://keywords.duoleads.com/logo.png",
"mimeType": "application/json",
"description": "Google Trends interest by region for one keyword: 0-100 interest per subregion of a country (or per country worldwide), past 7 days to 5 years, in one $0.03 GET. Use when you need where a keyword is searched most, for geo-targeting or local market research. A live call takes up to about 30 s. Bad input is free; upstream errors are not charged. Too little Google data gives an empty answer, which is still charged.",
"serviceName": "Google Trends Interest by Region"
},
"extensions": {
"bazaar": {
"info": {
"input": {
"type": "http",
"method": "GET",
"queryParams": {
"country": "us",
"keyword": "seo api",
"timeframe": "past_12_months"
}
},
"output": {
"type": "json",
"example": {
"units": "value: Google Trends interest, 0-100 relative to the region with the highest interest; regions with too little data are left out (regionsWithoutData)",
"market": {
"country": "US",
"locationCode": 2840,
"locationName": "United States"
},
"source": "Google Trends",
"country": "US",
"keyword": "seo api",
"regions": [
{
"code": "US-NY",
"value": 100,
"region": "New York"
},
{
"code": "US-CA",
"value": 37,
"region": "California"
},
{
"code": "US-OR",
"value": 31,
"region": "Oregon"
},
{
"code": "US-TX",
"value": 17,
"region": "Texas"
}
],
"dataAsOf": "2022-04-21T18:40:17Z",
"see_also": {
"params": [
"keyword",
"country",
"timeframe"
],
"reason": "Need how interest changed over time in one country? Call trend with that country.",
"endpoint": "https://keywords.duoleads.com/v1/trend"
},
"timeframe": "past_12_months",
"queried_at": "2022-04-21T18:40:17Z",
"request_id": "01KEXAMPLE0000000000000000",
"resolution": "region",
"regionsWithoutData": 3
}
}
},
"schema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"input"
],
"properties": {
"input": {
"type": "object",
"required": [
"type",
"method"
],
"properties": {
"type": {
"type": "string",
"const": "http"
},
"method": {
"enum": [
"GET"
],
"type": "string"
},
"queryParams": {
"type": "object",
"required": [
"keyword"
],
"properties": {
"country": {
"type": "string",
"pattern": "^[A-Za-z]{2}$",
"description": "ISO 3166-1 alpha-2 country code (us, gb, de, ...; uk = gb). Omit for worldwide."
},
"keyword": {
"type": "string",
"maxLength": 100,
"minLength": 2,
"description": "One keyword or phrase (2-100 characters, no commas)."
},
"timeframe": {
"enum": [
"past_7_days",
"past_30_days",
"past_90_days",
"past_12_months",
"past_5_years"
],
"type": "string",
"default": "past_12_months",
"description": "Time window. Default past_12_months."
}
}
}
},
"additionalProperties": false
},
"output": {
"type": "object",
"required": [
"type"
],
"properties": {
"type": {
"type": "string"
},
"example": {
"type": "object"
}
}
}
}
}
}
},
"x402Version": 2
}Captured payload 7 of 44
{
"error": "Payment required",
"accepts": [
{
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"extra": {
"name": "USD Coin",
"version": "2"
},
"payTo": "0xCD673f7e1daD254347AEab6be0DEFe8b9C6b3A39",
"amount": "40000",
"scheme": "exact",
"network": "eip155:8453",
"maxTimeoutSeconds": 120
}
],
"resource": {
"url": "https://keywords.duoleads.com/v1/related-keywords",
"tags": [
"related-keywords",
"keyword-research",
"seo",
"topic-clusters",
"search-volume"
],
"iconUrl": "https://keywords.duoleads.com/logo.png",
"mimeType": "application/json",
"description": "Related keywords for a seed from Google's 'searches related to' graph, to a depth of 0-4, each with search volume, CPC, competition, keyword difficulty and search intent; up to 100 in one $0.04 call (Google Ads data). Use when you need topic clusters around a keyword. Each row has its depth and the further related searches. No matches returns empty results (still charged). Bad input is free; upstream errors are not charged.",
"serviceName": "SEO Related Keywords"
},
"extensions": {
"bazaar": {
"info": {
"input": {
"body": {
"depth": 1,
"limit": 2,
"keyword": "running shoes",
"languageCode": "en",
"locationCode": 2840
},
"type": "http",
"method": "POST",
"bodyType": "json"
},
"output": {
"type": "json",
"example": {
"seed": "running shoes",
"depth": 1,
"total": 2,
"units": "volume: average monthly Google searches; cpc: US dollars; competition: 0-1 (Google Ads); competitionLevel: LOW|MEDIUM|HIGH; difficulty: 0-100; intent: informational|navigational|commercial|transactional; trendYoyPct: % change vs a year ago; depth: steps from the seed",
"market": {
"country": "US",
"fallback": false,
"languageCode": "en",
"locationCode": 2840,
"locationName": "United States"
},
"source": "Google Ads data",
"results": [
{
"cpc": 1.12,
"depth": 0,
"intent": "commercial",
"volume": 201000,
"keyword": "running shoes",
"difficulty": 61,
"competition": 1,
"trendYoyPct": 22,
"relatedKeywords": [
"best running shoes",
"running shoes for women"
],
"competitionLevel": "HIGH"
},
{
"cpc": 0.85,
"depth": 1,
"intent": "commercial",
"volume": 60500,
"keyword": "best running shoes",
"difficulty": 58,
"competition": 1,
"trendYoyPct": 0,
"relatedKeywords": [
"best running shoes for men"
],
"competitionLevel": "HIGH"
}
],
"dataAsOf": "2026-10-19T17:25:00Z",
"available": 9,
"request_id": "01KEXAMPLE0000000000000000"
}
}
},
"schema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"input"
],
"properties": {
"input": {
"type": "object",
"required": [
"type",
"method",
"bodyType",
"body"
],
"properties": {
"body": {
"type": "object",
"required": [
"keyword"
],
"properties": {
"depth": {
"type": "integer",
"maximum": 4,
"minimum": 0,
"description": "How many levels of the related-searches graph to traverse (0-4). Defaults to 1."
},
"limit": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"description": "Maximum keywords to return (1-100). Defaults to 20."
},
"country": {
"type": "string",
"maxLength": 64,
"description": "Optional ISO 3166-1 alpha-2 code or country name, used when locationCode is absent (uk = gb)."
},
"keyword": {
"type": "string",
"maxLength": 80,
"minLength": 1,
"description": "Seed keyword (at most 80 characters; whitespace, control characters and case are normalised; a seed then empty, over 10 words or over 80 characters is a free 400)."
},
"languageCode": {
"type": "string",
"maxLength": 16,
"description": "Language code (2-letter). Defaults to en. An unsupported location falls back to 2840 (United States) with en (or the requested language if the United States offers it); a supported location with a language it does not offer uses that location's default language (en if offered). Either way market.fallback is true and market.warnings says what was used."
},
"locationCode": {
"type": "integer",
"description": "Google Ads location code (geo target ID). Defaults to 2840 (United States); an unsupported code falls back to 2840 (United States, market.fallback)."
}
}
},
"type": {
"type": "string",
"const": "http"
},
"method": {
"enum": [
"POST"
],
"type": "string"
},
"bodyType": {
"enum": [
"json",
"form-data",
"text"
],
"type": "string"
}
},
"additionalProperties": false
},
"output": {
"type": "object",
"required": [
"type"
],
"properties": {
"type": {
"type": "string"
},
"example": {
"type": "object"
}
}
}
}
}
}
},
"x402Version": 2
}Captured payload 8 of 44
{
"error": "Payment required",
"accepts": [
{
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"extra": {
"name": "USD Coin",
"version": "2"
},
"payTo": "0xCD673f7e1daD254347AEab6be0DEFe8b9C6b3A39",
"amount": "40000",
"scheme": "exact",
"network": "eip155:8453",
"maxTimeoutSeconds": 120
}
],
"resource": {
"url": "https://keywords.duoleads.com/v1/keyword-variations",
"tags": [
"keyword-variations",
"long-tail-keywords",
"seo",
"keyword-research",
"search-volume"
],
"iconUrl": "https://keywords.duoleads.com/logo.png",
"mimeType": "application/json",
"description": "Keyword variations: long-tail Google searches that contain a seed phrase, each with search volume, CPC, competition, keyword difficulty and search intent; up to 100 in one $0.04 call (Google Ads data). Use when you need phrase-match ideas for a keyword, sorted by volume. No matches returns empty results (still charged). Bad input is free; upstream errors are not charged.",
"serviceName": "SEO Keyword Variations"
},
"extensions": {
"bazaar": {
"info": {
"input": {
"body": {
"limit": 2,
"keyword": "running shoes",
"languageCode": "en",
"locationCode": 2840
},
"type": "http",
"method": "POST",
"bodyType": "json"
},
"output": {
"type": "json",
"example": {
"seed": "running shoes",
"total": 2,
"units": "volume: average monthly Google searches; cpc: US dollars; competition: 0-1 (Google Ads); competitionLevel: LOW|MEDIUM|HIGH; difficulty: 0-100; intent: informational|navigational|commercial|transactional; trendYoyPct: % change vs a year ago",
"market": {
"country": "US",
"fallback": false,
"languageCode": "en",
"locationCode": 2840,
"locationName": "United States"
},
"source": "Google Ads data",
"results": [
{
"cpc": 0.85,
"intent": "commercial",
"volume": 60500,
"keyword": "best running shoes",
"difficulty": 58,
"competition": 1,
"trendYoyPct": 0,
"competitionLevel": "HIGH"
},
{
"cpc": 0.95,
"intent": "transactional",
"volume": 33100,
"keyword": "running shoes for women",
"difficulty": 47,
"competition": 1,
"trendYoyPct": 22,
"competitionLevel": "HIGH"
}
],
"dataAsOf": "2026-10-17T08:27:20Z",
"available": 1088,
"request_id": "01KEXAMPLE0000000000000000"
}
}
},
"schema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"input"
],
"properties": {
"input": {
"type": "object",
"required": [
"type",
"method",
"bodyType",
"body"
],
"properties": {
"body": {
"type": "object",
"required": [
"keyword"
],
"properties": {
"limit": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"description": "Maximum variations to return (1-100). Defaults to 20."
},
"country": {
"type": "string",
"maxLength": 64,
"description": "Optional ISO 3166-1 alpha-2 code or country name, used when locationCode is absent (uk = gb)."
},
"keyword": {
"type": "string",
"maxLength": 80,
"minLength": 1,
"description": "Seed phrase; every result contains it (at most 80 characters; normalised like keyword-ideas)."
},
"languageCode": {
"type": "string",
"maxLength": 16,
"description": "Language code (2-letter). Defaults to en. An unsupported location falls back to 2840 (United States) with en (or the requested language if the United States offers it); a supported location with a language it does not offer uses that location's default language (en if offered). Either way market.fallback is true and market.warnings says what was used."
},
"locationCode": {
"type": "integer",
"description": "Google Ads location code (geo target ID). Defaults to 2840 (United States); an unsupported code falls back to 2840 (United States, market.fallback)."
}
}
},
"type": {
"type": "string",
"const": "http"
},
"method": {
"enum": [
"POST"
],
"type": "string"
},
"bodyType": {
"enum": [
"json",
"form-data",
"text"
],
"type": "string"
}
},
"additionalProperties": false
},
"output": {
"type": "object",
"required": [
"type"
],
"properties": {
"type": {
"type": "string"
},
"example": {
"type": "object"
}
}
}
}
}
}
},
"x402Version": 2
}Captured payload 9 of 44
{
"error": "Payment required",
"accepts": [
{
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"extra": {
"name": "USD Coin",
"version": "2"
},
"payTo": "0xCD673f7e1daD254347AEab6be0DEFe8b9C6b3A39",
"amount": "40000",
"scheme": "exact",
"network": "eip155:8453",
"maxTimeoutSeconds": 120
}
],
"resource": {
"url": "https://keywords.duoleads.com/v1/keyword-difficulty",
"tags": [
"keyword-difficulty",
"seo",
"keyword-research",
"serp-difficulty",
"ranking"
],
"iconUrl": "https://keywords.duoleads.com/logo.png",
"mimeType": "application/json",
"description": "Keyword difficulty (0-100: how hard it is to rank in Google's top 10) for up to 100 keywords in one $0.04 call. Use when you need to prioritise keywords by ranking difficulty. Keywords are normalised to lower case; over 100 keywords is a free 400. Keywords without a score are listed in missing (still charged). Bad input is free; upstream errors are not charged.",
"serviceName": "SEO Keyword Difficulty"
},
"extensions": {
"bazaar": {
"info": {
"input": {
"body": {
"keywords": [
"running shoes",
"trail running shoes"
],
"languageCode": "en",
"locationCode": 2840
},
"type": "http",
"method": "POST",
"bodyType": "json"
},
"output": {
"type": "json",
"example": {
"total": 2,
"units": "difficulty: 0-100, how hard it is to rank in Google's top 10 for the keyword",
"market": {
"country": "US",
"fallback": false,
"languageCode": "en",
"locationCode": 2840,
"locationName": "United States"
},
"source": "Google Ads data",
"missing": [],
"results": [
{
"keyword": "running shoes",
"difficulty": 61
},
{
"keyword": "trail running shoes",
"difficulty": 38
}
],
"request_id": "01KEXAMPLE0000000000000000"
}
}
},
"schema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"input"
],
"properties": {
"input": {
"type": "object",
"required": [
"type",
"method",
"bodyType",
"body"
],
"properties": {
"body": {
"type": "object",
"required": [
"keywords"
],
"properties": {
"country": {
"type": "string",
"maxLength": 64,
"description": "Optional ISO 3166-1 alpha-2 code or country name, used when locationCode is absent (uk = gb)."
},
"keywords": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 100,
"minItems": 1,
"description": "Keywords to score (1-100; each at most 80 characters, normalised to lower case; one that is then empty, over 10 words or over 80 characters is listed in missing)."
},
"languageCode": {
"type": "string",
"maxLength": 16,
"description": "Language code (2-letter). Defaults to en. An unsupported location falls back to 2840 (United States) with en (or the requested language if the United States offers it); a supported location with a language it does not offer uses that location's default language (en if offered). Either way market.fallback is true and market.warnings says what was used."
},
"locationCode": {
"type": "integer",
"description": "Google Ads location code (geo target ID). Defaults to 2840 (United States); an unsupported code falls back to 2840 (United States, market.fallback)."
}
}
},
"type": {
"type": "string",
"const": "http"
},
"method": {
"enum": [
"POST"
],
"type": "string"
},
"bodyType": {
"enum": [
"json",
"form-data",
"text"
],
"type": "string"
}
},
"additionalProperties": false
},
"output": {
"type": "object",
"required": [
"type"
],
"properties": {
"type": {
"type": "string"
},
"example": {
"type": "object"
}
}
}
}
}
}
},
"x402Version": 2
}Captured payload 10 of 44
{
"error": "Payment required",
"accepts": [
{
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"extra": {
"name": "USD Coin",
"version": "2"
},
"payTo": "0xCD673f7e1daD254347AEab6be0DEFe8b9C6b3A39",
"amount": "40000",
"scheme": "exact",
"network": "eip155:8453",
"maxTimeoutSeconds": 120
}
],
"resource": {
"url": "https://keywords.duoleads.com/v1/search-intent",
"tags": [
"search-intent",
"keyword-intent",
"seo",
"keyword-research",
"content-strategy"
],
"iconUrl": "https://keywords.duoleads.com/logo.png",
"mimeType": "application/json",
"description": "Search intent of up to 100 keywords in one $0.04 call: the main intent (informational, navigational, commercial or transactional) with its probability, plus secondary intents. Use when you need to map keywords to funnel stage or content type. Any language; no location needed. Over 100 keywords is a free 400. Keywords not classified are listed in missing (still charged). Bad input is free; upstream errors are not charged.",
"serviceName": "SEO Search Intent Classifier"
},
"extensions": {
"bazaar": {
"info": {
"input": {
"body": {
"keywords": [
"buy running shoes",
"how to clean running shoes"
]
},
"type": "http",
"method": "POST",
"bodyType": "json"
},
"output": {
"type": "json",
"example": {
"total": 2,
"units": "intent: informational|navigational|commercial|transactional; probability: 0-1 (model confidence)",
"source": "Google search results (intent model)",
"missing": [],
"results": [
{
"intent": "transactional",
"keyword": "buy running shoes",
"probability": 0.92,
"secondaryIntents": [
{
"label": "commercial",
"probability": 0.31
}
]
},
{
"intent": "informational",
"keyword": "how to clean running shoes",
"probability": 0.99
}
],
"request_id": "01KEXAMPLE0000000000000000"
}
}
},
"schema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"input"
],
"properties": {
"input": {
"type": "object",
"required": [
"type",
"method",
"bodyType",
"body"
],
"properties": {
"body": {
"type": "object",
"required": [
"keywords"
],
"properties": {
"keywords": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 100,
"minItems": 1,
"description": "Keywords to classify (1-100; each at most 80 characters, normalised to lower case; one that is then empty, over 10 words or over 80 characters is listed in missing)."
},
"languageCode": {
"type": "string",
"maxLength": 16,
"description": "Accepted for compatibility and ignored: the classifier detects the language itself."
}
}
},
"type": {
"type": "string",
"const": "http"
},
"method": {
"enum": [
"POST"
],
"type": "string"
},
"bodyType": {
"enum": [
"json",
"form-data",
"text"
],
"type": "string"
}
},
"additionalProperties": false
},
"output": {
"type": "object",
"required": [
"type"
],
"properties": {
"type": {
"type": "string"
},
"example": {
"type": "object"
}
}
}
}
}
}
},
"x402Version": 2
}Captured payload 11 of 44
{
"error": "Payment required",
"accepts": [
{
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"extra": {
"name": "USD Coin",
"version": "2"
},
"payTo": "0xCD673f7e1daD254347AEab6be0DEFe8b9C6b3A39",
"amount": "48000",
"scheme": "exact",
"network": "eip155:8453",
"maxTimeoutSeconds": 120
}
],
"resource": {
"url": "https://keywords.duoleads.com/v1/keyword-volume-history",
"tags": [
"search-volume-history",
"seasonality",
"seo",
"keyword-research",
"search-volume"
],
"iconUrl": "https://keywords.duoleads.com/logo.png",
"mimeType": "application/json",
"description": "Monthly Google search volume history for up to 20 keywords in one $0.048 call: every month the data has (typically several years), oldest first, plus current volume, CPC and competition (Google Ads data). Use when you need seasonality or long-term demand trends. Over 20 keywords is a free 400. Keywords without data are listed in missing (still charged). Bad input is free; upstream errors are not charged.",
"serviceName": "SEO Keyword Volume History"
},
"extensions": {
"bazaar": {
"info": {
"input": {
"body": {
"keywords": [
"running shoes",
"trail running shoes"
],
"languageCode": "en",
"locationCode": 2840
},
"type": "http",
"method": "POST",
"bodyType": "json"
},
"output": {
"type": "json",
"example": {
"total": 2,
"units": "history: average Google searches per month (date YYYY-MM), oldest first; volume: average monthly searches (last 12 months); cpc: US dollars; competition: 0-1 (Google Ads)",
"market": {
"country": "US",
"fallback": false,
"languageCode": "en",
"locationCode": 2840,
"locationName": "United States"
},
"source": "Google Ads data",
"missing": [],
"results": [
{
"cpc": 1.12,
"volume": 201000,
"history": [
{
"date": "2026-08",
"volume": 246000
},
{
"date": "2026-09",
"volume": 201000
}
],
"keyword": "running shoes",
"competition": 1,
"competitionLevel": "HIGH"
},
{
"cpc": 0.98,
"volume": 49500,
"history": [
{
"date": "2026-08",
"volume": 60500
},
{
"date": "2026-09",
"volume": 49500
}
],
"keyword": "trail running shoes",
"competition": 1,
"competitionLevel": "HIGH"
}
],
"dataAsOf": "2026-10-19T17:25:00Z",
"request_id": "01KEXAMPLE0000000000000000"
}
}
},
"schema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"input"
],
"properties": {
"input": {
"type": "object",
"required": [
"type",
"method",
"bodyType",
"body"
],
"properties": {
"body": {
"type": "object",
"required": [
"keywords"
],
"properties": {
"country": {
"type": "string",
"maxLength": 64,
"description": "Optional ISO 3166-1 alpha-2 code or country name, used when locationCode is absent (uk = gb)."
},
"keywords": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 20,
"minItems": 1,
"description": "Keywords to look up (1-20; each at most 80 characters, normalised to lower case; one that is then empty, over 10 words or over 80 characters is listed in missing)."
},
"languageCode": {
"type": "string",
"maxLength": 16,
"description": "Language code (2-letter). Defaults to en. An unsupported location falls back to 2840 (United States) with en (or the requested language if the United States offers it); a supported location with a language it does not offer uses that location's default language (en if offered). Either way market.fallback is true and market.warnings says what was used."
},
"locationCode": {
"type": "integer",
"description": "Google Ads location code (geo target ID). Defaults to 2840 (United States); an unsupported code falls back to 2840 (United States, market.fallback)."
}
}
},
"type": {
"type": "string",
"const": "http"
},
"method": {
"enum": [
"POST"
],
"type": "string"
},
"bodyType": {
"enum": [
"json",
"form-data",
"text"
],
"type": "string"
}
},
"additionalProperties": false
},
"output": {
"type": "object",
"required": [
"type"
],
"properties": {
"type": {
"type": "string"
},
"example": {
"type": "object"
}
}
}
}
}
}
},
"x402Version": 2
}Captured payload 12 of 44
{
"error": "Payment required",
"accepts": [
{
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"extra": {
"name": "USD Coin",
"version": "2"
},
"payTo": "0xCD673f7e1daD254347AEab6be0DEFe8b9C6b3A39",
"amount": "40000",
"scheme": "exact",
"network": "eip155:8453",
"maxTimeoutSeconds": 120
}
],
"resource": {
"url": "https://keywords.duoleads.com/v1/keyword-suggestions",
"tags": [
"keywords-for-site",
"keyword-suggestions",
"seo",
"keyword-research",
"competitor-keywords"
],
"iconUrl": "https://keywords.duoleads.com/logo.png",
"mimeType": "application/json",
"description": "Keyword suggestions for a website or one page: the Google searches relevant to it, each with search volume, CPC, competition, keyword difficulty and search intent; up to 100 in one $0.04 call (Google Ads data). Use when you need keyword ideas from a domain (www. is dropped) or a page URL. A site with no data returns empty results (still charged). Bad input is free; upstream errors are not charged.",
"serviceName": "SEO Keywords for a Site"
},
"extensions": {
"bazaar": {
"info": {
"input": {
"body": {
"limit": 2,
"target": "example.com",
"targetType": "site",
"languageCode": "en",
"locationCode": 2840
},
"type": "http",
"method": "POST",
"bodyType": "json"
},
"output": {
"type": "json",
"example": {
"total": 2,
"units": "volume: average monthly Google searches; cpc: US dollars; competition: 0-1 (Google Ads); competitionLevel: LOW|MEDIUM|HIGH; difficulty: 0-100; intent: informational|navigational|commercial|transactional; trendYoyPct: % change vs a year ago",
"market": {
"country": "US",
"fallback": false,
"languageCode": "en",
"locationCode": 2840,
"locationName": "United States"
},
"source": "Google Ads data",
"target": "example.com",
"results": [
{
"cpc": 0.42,
"intent": "informational",
"volume": 2400,
"keyword": "example domain",
"difficulty": 12,
"competition": 0.03,
"trendYoyPct": 0,
"competitionLevel": "LOW"
},
{
"cpc": 0.65,
"intent": "navigational",
"volume": 1300,
"keyword": "example website",
"difficulty": 21,
"competition": 0.05,
"trendYoyPct": -18,
"competitionLevel": "LOW"
}
],
"dataAsOf": "2026-10-15T07:48:51Z",
"available": 140,
"request_id": "01KEXAMPLE0000000000000000",
"targetType": "site"
}
}
},
"schema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"input"
],
"properties": {
"input": {
"type": "object",
"required": [
"type",
"method",
"bodyType",
"body"
],
"properties": {
"body": {
"type": "object",
"required": [
"target"
],
"properties": {
"limit": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"description": "Maximum keywords to return (1-100). Defaults to 20."
},
"target": {
"type": "string",
"maxLength": 2048,
"minLength": 1,
"description": "targetType site: a bare domain like example.com (no scheme or path; a leading www. is dropped). targetType page: an absolute http(s) page URL."
},
"country": {
"type": "string",
"maxLength": 64,
"description": "Optional ISO 3166-1 alpha-2 code or country name, used when locationCode is absent (uk = gb)."
},
"targetType": {
"enum": [
"site",
"page"
],
"type": "string",
"description": "Suggest keywords for the whole site (default) or only the target page."
},
"languageCode": {
"type": "string",
"maxLength": 16,
"description": "Language code (2-letter). Defaults to en. An unsupported location falls back to 2840 (United States) with en (or the requested language if the United States offers it); a supported location with a language it does not offer uses that location's default language (en if offered). Either way market.fallback is true and market.warnings says what was used."
},
"locationCode": {
"type": "integer",
"description": "Google Ads location code (geo target ID). Defaults to 2840 (United States); an unsupported code falls back to 2840 (United States, market.fallback)."
}
}
},
"type": {
"type": "string",
"const": "http"
},
"method": {
"enum": [
"POST"
],
"type": "string"
},
"bodyType": {
"enum": [
"json",
"form-data",
"text"
],
"type": "string"
}
},
"additionalProperties": false
},
"output": {
"type": "object",
"required": [
"type"
],
"properties": {
"type": {
"type": "string"
},
"example": {
"type": "object"
}
}
}
}
}
}
},
"x402Version": 2
}Captured payload 13 of 44
{
"error": "Payment required",
"accepts": [
{
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"extra": {
"name": "USD Coin",
"version": "2"
},
"payTo": "0xCD673f7e1daD254347AEab6be0DEFe8b9C6b3A39",
"amount": "45000",
"scheme": "exact",
"network": "eip155:8453",
"maxTimeoutSeconds": 120
}
],
"resource": {
"url": "https://keywords.duoleads.com/v1/trends",
"tags": [
"google-trends",
"trends-comparison",
"trends",
"seo",
"search-trends"
],
"iconUrl": "https://keywords.duoleads.com/logo.png",
"mimeType": "application/json",
"description": "Google Trends comparison of up to 5 keywords: one relative 0-100 interest series for all of them (same scale), with each keyword's average and latest value; worldwide or one country, 7 days to 5 years, web, news or YouTube search, in one $0.045 call. Use when you need to compare demand or seasonality between terms. A live call takes up to about 30 s. Too little data gives found false (still charged). Bad input is free; upstream errors are not charged.",
"serviceName": "Google Trends Keyword Comparison"
},
"extensions": {
"bazaar": {
"info": {
"input": {
"body": {
"type": "web",
"keywords": [
"running shoes",
"trail running shoes"
],
"location": "United States",
"timeframe": "12m"
},
"type": "http",
"method": "POST",
"bodyType": "json"
},
"output": {
"type": "json",
"example": {
"type": "web",
"found": true,
"units": "values: Google Trends interest, 0-100 relative to the highest point of all compared keywords in the period, in keywords order; partial: the period is not complete yet; averages / latest: per keyword",
"latest": [
81,
25
],
"market": {
"country": "US",
"locationCode": 2840,
"locationName": "United States"
},
"source": "Google Trends",
"averages": [
74.3,
22
],
"dataAsOf": "2026-10-11T19:24:11Z",
"interest": [
{
"date": "2025-10-05",
"values": [
72,
21
]
},
{
"date": "2025-10-12",
"values": [
70,
20
]
},
{
"date": "2026-10-11",
"values": [
81,
25
],
"partial": true
}
],
"keywords": [
"running shoes",
"trail running shoes"
],
"timeframe": "past_12_months",
"request_id": "01KEXAMPLE0000000000000000",
"granularity": "week"
}
}
},
"schema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"input"
],
"properties": {
"input": {
"type": "object",
"required": [
"type",
"method",
"bodyType",
"body"
],
"properties": {
"body": {
"type": "object",
"required": [
"keywords"
],
"properties": {
"type": {
"enum": [
"web",
"news",
"youtube"
],
"type": "string",
"description": "Google property: web (default), news or youtube."
},
"keywords": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 5,
"minItems": 1,
"description": "1-5 terms to compare, e.g. [\"running shoes\", \"trail running shoes\"] (each 2-100 characters, no commas)."
},
"location": {
"type": "string",
"maxLength": 120,
"description": "Market: a country name (\"United States\") or ISO 3166-1 alpha-2 code (us, gb, de; uk = gb). Omit for worldwide."
},
"timeframe": {
"enum": [
"7d",
"30d",
"90d",
"12m",
"5y",
"past_7_days",
"past_30_days",
"past_90_days",
"past_12_months",
"past_5_years"
],
"type": "string",
"description": "Time window: 7d, 30d, 90d, 12m or 5y (default 12m); the past_* names of /v1/trend work too."
}
}
},
"type": {
"type": "string",
"const": "http"
},
"method": {
"enum": [
"POST"
],
"type": "string"
},
"bodyType": {
"enum": [
"json",
"form-data",
"text"
],
"type": "string"
}
},
"additionalProperties": false
},
"output": {
"type": "object",
"required": [
"type"
],
"properties": {
"type": {
"type": "string"
},
"example": {
"type": "object"
}
}
}
}
}
}
},
"x402Version": 2
}Captured payload 14 of 44
{
"error": "Payment required",
"accepts": [
{
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"extra": {
"name": "USD Coin",
"version": "2"
},
"payTo": "0xCD673f7e1daD254347AEab6be0DEFe8b9C6b3A39",
"amount": "40000",
"scheme": "exact",
"network": "eip155:8453",
"maxTimeoutSeconds": 120
}
],
"resource": {
"url": "https://keywords.duoleads.com/v1/domain-overview",
"tags": [
"domain-overview",
"seo-audit",
"seo",
"organic-traffic",
"domain-authority"
],
"iconUrl": "https://keywords.duoleads.com/logo.png",
"mimeType": "application/json",
"description": "Domain overview: a domain's Google SEO footprint in one market: organic and paid ranking keywords, estimated monthly traffic (etv) and its ad value, and keywords in position 1, top 3, top 10 and top 100, in one $0.04 call. Use when you need a quick SEO size-up of a website or competitor (bare domain; www. is dropped). A domain with no data gives found false (still charged). Bad input is free; upstream errors are not charged.",
"serviceName": "SEO Domain Overview"
},
"extensions": {
"bazaar": {
"info": {
"input": {
"body": {
"target": "example.com",
"languageCode": "en",
"locationCode": 2840
},
"type": "http",
"method": "POST",
"bodyType": "json"
},
"output": {
"type": "json",
"example": {
"paid": {
"etv": 0,
"pos1": 0,
"top3": 0,
"top10": 0,
"top100": 0,
"keywords": 0,
"trafficCostUsd": 0
},
"found": true,
"units": "keywords: ranking keywords; etv: estimated monthly organic (or paid) visits from Google; trafficCostUsd: estimated monthly cost of that traffic as ads, US dollars; pos1/top3/top10/top100: keywords ranking at position 1 / 1-3 / 1-10 / 1-100",
"market": {
"country": "US",
"fallback": false,
"languageCode": "en",
"locationCode": 2840,
"locationName": "United States"
},
"source": "Google search results (estimates)",
"target": "example.com",
"organic": {
"etv": 15860.74,
"pos1": 40,
"top3": 182,
"top10": 1279,
"top100": 8703,
"keywords": 8703,
"trafficCostUsd": 89125.12
},
"request_id": "01KEXAMPLE0000000000000000"
}
}
},
"schema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"input"
],
"properties": {
"input": {
"type": "object",
"required": [
"type",
"method",
"bodyType",
"body"
],
"properties": {
"body": {
"type": "object",
"required": [
"target"
],
"properties": {
"target": {
"type": "string",
"maxLength": 253,
"minLength": 1,
"description": "Bare domain like example.com (no scheme, path or port; a leading www. is dropped)."
},
"country": {
"type": "string",
"maxLength": 64,
"description": "Optional ISO 3166-1 alpha-2 code or country name, used when locationCode is absent (uk = gb)."
},
"languageCode": {
"type": "string",
"maxLength": 16,
"description": "Language code (2-letter). Defaults to en. An unsupported location falls back to 2840 (United States) with en (or the requested language if the United States offers it); a supported location with a language it does not offer uses that location's default language (en if offered). Either way market.fallback is true and market.warnings says what was used."
},
"locationCode": {
"type": "integer",
"description": "Google Ads location code (geo target ID). Defaults to 2840 (United States); an unsupported code falls back to 2840 (United States, market.fallback)."
}
}
},
"type": {
"type": "string",
"const": "http"
},
"method": {
"enum": [
"POST"
],
"type": "string"
},
"bodyType": {
"enum": [
"json",
"form-data",
"text"
],
"type": "string"
}
},
"additionalProperties": false
},
"output": {
"type": "object",
"required": [
"type"
],
"properties": {
"type": {
"type": "string"
},
"example": {
"type": "object"
}
}
}
}
}
}
},
"x402Version": 2
}Captured payload 15 of 44
{
"error": "Payment required",
"accepts": [
{
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"extra": {
"name": "USD Coin",
"version": "2"
},
"payTo": "0xCD673f7e1daD254347AEab6be0DEFe8b9C6b3A39",
"amount": "40000",
"scheme": "exact",
"network": "eip155:8453",
"maxTimeoutSeconds": 120
}
],
"resource": {
"url": "https://keywords.duoleads.com/v1/traffic-estimate",
"tags": [
"traffic-estimate",
"website-traffic",
"seo",
"organic-traffic",
"competitor-analysis"
],
"iconUrl": "https://keywords.duoleads.com/logo.png",
"mimeType": "application/json",
"description": "Traffic estimate for up to 100 domains in one $0.04 call: each domain's estimated monthly organic and paid visits from Google (etv) and its count of ranking keywords. Use when you need to compare the search traffic of many websites at once (bare domains; www. is dropped). A domain with no data gives found false (still charged). Bad input is free; upstream errors are not charged.",
"serviceName": "SEO Website Traffic Estimate"
},
"extensions": {
"bazaar": {
"info": {
"input": {
"body": {
"targets": [
"example.com",
"example.org"
],
"languageCode": "en",
"locationCode": 2840
},
"type": "http",
"method": "POST",
"bodyType": "json"
},
"output": {
"type": "json",
"example": {
"total": 2,
"units": "organicEtv / paidEtv: estimated monthly visits from Google organic / paid results; organicKeywords / paidKeywords: ranking keywords",
"market": {
"country": "US",
"fallback": false,
"languageCode": "en",
"locationCode": 2840,
"locationName": "United States"
},
"source": "Google search results (estimates)",
"results": [
{
"found": true,
"target": "example.com",
"paidEtv": 80.66,
"organicEtv": 28068.67,
"paidKeywords": 14,
"organicKeywords": 31554
},
{
"found": true,
"target": "example.org",
"paidEtv": 0,
"organicEtv": 1210.4,
"paidKeywords": 0,
"organicKeywords": 2210
}
],
"request_id": "01KEXAMPLE0000000000000000"
}
}
},
"schema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"input"
],
"properties": {
"input": {
"type": "object",
"required": [
"type",
"method",
"bodyType",
"body"
],
"properties": {
"body": {
"type": "object",
"required": [
"targets"
],
"properties": {
"country": {
"type": "string",
"maxLength": 64,
"description": "Optional ISO 3166-1 alpha-2 code or country name, used when locationCode is absent (uk = gb)."
},
"targets": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 100,
"minItems": 1,
"description": "Bare domains (1-100) like example.com; no scheme or path; a leading www. is dropped."
},
"languageCode": {
"type": "string",
"maxLength": 16,
"description": "Language code (2-letter). Defaults to en. An unsupported location falls back to 2840 (United States) with en (or the requested language if the United States offers it); a supported location with a language it does not offer uses that location's default language (en if offered). Either way market.fallback is true and market.warnings says what was used."
},
"locationCode": {
"type": "integer",
"description": "Google Ads location code (geo target ID). Defaults to 2840 (United States); an unsupported code falls back to 2840 (United States, market.fallback)."
}
}
},
"type": {
"type": "string",
"const": "http"
},
"method": {
"enum": [
"POST"
],
"type": "string"
},
"bodyType": {
"enum": [
"json",
"form-data",
"text"
],
"type": "string"
}
},
"additionalProperties": false
},
"output": {
"type": "object",
"required": [
"type"
],
"properties": {
"type": {
"type": "string"
},
"example": {
"type": "object"
}
}
}
}
}
}
},
"x402Version": 2
}Captured payload 16 of 44
{
"error": "Payment required",
"accepts": [
{
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"extra": {
"name": "USD Coin",
"version": "2"
},
"payTo": "0xCD673f7e1daD254347AEab6be0DEFe8b9C6b3A39",
"amount": "48000",
"scheme": "exact",
"network": "eip155:8453",
"maxTimeoutSeconds": 120
}
],
"resource": {
"url": "https://keywords.duoleads.com/v1/ranked-keywords",
"tags": [
"ranked-keywords",
"organic-keywords",
"seo",
"competitor-analysis",
"keyword-research"
],
"iconUrl": "https://keywords.duoleads.com/logo.png",
"mimeType": "application/json",
"description": "Ranked keywords: the Google keywords a domain ranks for, each with its position, ranking URL, estimated traffic and the keyword's search volume, CPC, difficulty and intent; up to 100 in one $0.048 call. Use when you need a site's or competitor's organic keywords (bare domain; www. is dropped). A domain with no data returns empty results (still charged). Bad input is free; upstream errors are not charged.",
"serviceName": "SEO Ranked Keywords of a Domain"
},
"extensions": {
"bazaar": {
"info": {
"input": {
"body": {
"limit": 2,
"target": "example.com",
"languageCode": "en",
"locationCode": 2840
},
"type": "http",
"method": "POST",
"bodyType": "json"
},
"output": {
"type": "json",
"example": {
"total": 2,
"units": "position: rank among Google's organic results; rankAbsolute: rank among all result elements; etv: estimated monthly visits from this ranking; volume: average monthly Google searches; cpc: US dollars; competition: 0-1 (Google Ads); competitionLevel: LOW|MEDIUM|HIGH; difficulty: 0-100; intent: informational|navigational|commercial|transactional; trendYoyPct: % change vs a year ago",
"market": {
"country": "US",
"fallback": false,
"languageCode": "en",
"locationCode": 2840,
"locationName": "United States"
},
"source": "Google search results (estimates) and Google Ads data",
"target": "example.com",
"results": [
{
"cpc": 0.42,
"etv": 312.4,
"url": "https://example.com/",
"type": "organic",
"intent": "informational",
"volume": 2400,
"keyword": "example domain",
"position": 1,
"difficulty": 12,
"competition": 0.03,
"trendYoyPct": 0,
"rankAbsolute": 1,
"competitionLevel": "LOW"
},
{
"cpc": 0.65,
"etv": 51.2,
"url": "https://example.com/about",
"type": "organic",
"intent": "navigational",
"volume": 1300,
"keyword": "example website",
"position": 3,
"difficulty": 21,
"competition": 0.05,
"trendYoyPct": -18,
"rankAbsolute": 4,
"competitionLevel": "LOW"
}
],
"dataAsOf": "2026-10-19T17:25:00Z",
"available": 8806,
"request_id": "01KEXAMPLE0000000000000000"
}
}
},
"schema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"input"
],
"properties": {
"input": {
"type": "object",
"required": [
"type",
"method",
"bodyType",
"body"
],
"properties": {
"body": {
"type": "object",
"required": [
"target"
],
"properties": {
"limit": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"description": "Maximum keywords to return (1-100). Defaults to 20."
},
"target": {
"type": "string",
"maxLength": 253,
"minLength": 1,
"description": "Bare domain like example.com (no scheme, path or port; a leading www. is dropped)."
},
"country": {
"type": "string",
"maxLength": 64,
"description": "Optional ISO 3166-1 alpha-2 code or country name, used when locationCode is absent (uk = gb)."
},
"languageCode": {
"type": "string",
"maxLength": 16,
"description": "Language code (2-letter). Defaults to en. An unsupported location falls back to 2840 (United States) with en (or the requested language if the United States offers it); a supported location with a language it does not offer uses that location's default language (en if offered). Either way market.fallback is true and market.warnings says what was used."
},
"locationCode": {
"type": "integer",
"description": "Google Ads location code (geo target ID). Defaults to 2840 (United States); an unsupported code falls back to 2840 (United States, market.fallback)."
}
}
},
"type": {
"type": "string",
"const": "http"
},
"method": {
"enum": [
"POST"
],
"type": "string"
},
"bodyType": {
"enum": [
"json",
"form-data",
"text"
],
"type": "string"
}
},
"additionalProperties": false
},
"output": {
"type": "object",
"required": [
"type"
],
"properties": {
"type": {
"type": "string"
},
"example": {
"type": "object"
}
}
}
}
}
}
},
"x402Version": 2
}Captured payload 17 of 44
{
"error": "Payment required",
"accepts": [
{
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"extra": {
"name": "USD Coin",
"version": "2"
},
"payTo": "0xCD673f7e1daD254347AEab6be0DEFe8b9C6b3A39",
"amount": "48000",
"scheme": "exact",
"network": "eip155:8453",
"maxTimeoutSeconds": 120
}
],
"resource": {
"url": "https://keywords.duoleads.com/v1/competitors",
"tags": [
"competitor-analysis",
"seo-competitors",
"seo",
"competitor-domains",
"organic-traffic"
],
"iconUrl": "https://keywords.duoleads.com/logo.png",
"mimeType": "application/json",
"description": "Competitor domains: the websites competing with a domain in Google organic search, each with the keywords both rank for, the average position on them, and the competitor's total ranking keywords and estimated traffic; up to 100 in one $0.048 call. Use when you need to find a site's real SEO competitors (bare domain; www. is dropped). No data returns empty results (still charged). Bad input is free; upstream errors are not charged.",
"serviceName": "SEO Competitor Domains"
},
"extensions": {
"bazaar": {
"info": {
"input": {
"body": {
"limit": 2,
"target": "example.com",
"languageCode": "en",
"locationCode": 2840
},
"type": "http",
"method": "POST",
"bodyType": "json"
},
"output": {
"type": "json",
"example": {
"total": 2,
"units": "commonKeywords: keywords both domains rank for; avgPosition: the competitor's average Google position on them; keywords / etv: the competitor's ranking keywords and estimated monthly organic visits",
"market": {
"country": "US",
"fallback": false,
"languageCode": "en",
"locationCode": 2840,
"locationName": "United States"
},
"source": "Google search results (estimates)",
"target": "example.com",
"results": [
{
"etv": 3055537.62,
"domain": "example.org",
"keywords": 151186,
"avgPosition": 13.84,
"commonKeywords": 115
},
{
"etv": 88120.5,
"domain": "example.net",
"keywords": 20410,
"avgPosition": 21.5,
"commonKeywords": 64
}
],
"available": 993,
"request_id": "01KEXAMPLE0000000000000000"
}
}
},
"schema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"input"
],
"properties": {
"input": {
"type": "object",
"required": [
"type",
"method",
"bodyType",
"body"
],
"properties": {
"body": {
"type": "object",
"required": [
"target"
],
"properties": {
"limit": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"description": "Maximum competitors to return (1-100). Defaults to 20."
},
"target": {
"type": "string",
"maxLength": 253,
"minLength": 1,
"description": "Bare domain like example.com (no scheme, path or port; a leading www. is dropped)."
},
"country": {
"type": "string",
"maxLength": 64,
"description": "Optional ISO 3166-1 alpha-2 code or country name, used when locationCode is absent (uk = gb)."
},
"languageCode": {
"type": "string",
"maxLength": 16,
"description": "Language code (2-letter). Defaults to en. An unsupported location falls back to 2840 (United States) with en (or the requested language if the United States offers it); a supported location with a language it does not offer uses that location's default language (en if offered). Either way market.fallback is true and market.warnings says what was used."
},
"locationCode": {
"type": "integer",
"description": "Google Ads location code (geo target ID). Defaults to 2840 (United States); an unsupported code falls back to 2840 (United States, market.fallback)."
}
}
},
"type": {
"type": "string",
"const": "http"
},
"method": {
"enum": [
"POST"
],
"type": "string"
},
"bodyType": {
"enum": [
"json",
"form-data",
"text"
],
"type": "string"
}
},
"additionalProperties": false
},
"output": {
"type": "object",
"required": [
"type"
],
"properties": {
"type": {
"type": "string"
},
"example": {
"type": "object"
}
}
}
}
}
}
},
"x402Version": 2
}Captured payload 18 of 44
{
"error": "Payment required",
"accepts": [
{
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"extra": {
"name": "USD Coin",
"version": "2"
},
"payTo": "0xCD673f7e1daD254347AEab6be0DEFe8b9C6b3A39",
"amount": "48000",
"scheme": "exact",
"network": "eip155:8453",
"maxTimeoutSeconds": 120
}
],
"resource": {
"url": "https://keywords.duoleads.com/v1/keyword-gap",
"tags": [
"keyword-gap",
"competitor-analysis",
"seo",
"content-gap",
"keyword-research"
],
"iconUrl": "https://keywords.duoleads.com/logo.png",
"mimeType": "application/json",
"description": "Keyword gap: the Google keywords a competitor ranks for and your domain does not, each with the competitor's position, URL and estimated traffic plus search volume, CPC, difficulty and intent; up to 100 in one $0.048 call. Use when you need content gaps and keyword opportunities (bare domains; www. is dropped). No gap returns empty results (still charged). Bad input is free; upstream errors are not charged.",
"serviceName": "SEO Keyword Gap Analysis"
},
"extensions": {
"bazaar": {
"info": {
"input": {
"body": {
"limit": 2,
"domain": "example.com",
"competitor": "example.org",
"languageCode": "en",
"locationCode": 2840
},
"type": "http",
"method": "POST",
"bodyType": "json"
},
"output": {
"type": "json",
"example": {
"total": 2,
"units": "competitorRank: the competitor's rank among Google's organic results; competitorEtv: its estimated monthly visits from that ranking; volume: average monthly Google searches; cpc: US dollars; competition: 0-1 (Google Ads); competitionLevel: LOW|MEDIUM|HIGH; difficulty: 0-100; intent: informational|navigational|commercial|transactional; trendYoyPct: % change vs a year ago",
"domain": "example.com",
"market": {
"country": "US",
"fallback": false,
"languageCode": "en",
"locationCode": 2840,
"locationName": "United States"
},
"source": "Google search results (estimates) and Google Ads data",
"results": [
{
"intent": "informational",
"volume": 40,
"keyword": "example nonprofit",
"difficulty": 0,
"competition": 0.06,
"trendYoyPct": -67,
"competitorEtv": 2.4,
"competitorUrl": "https://example.org/about",
"competitorRank": 2,
"competitionLevel": "LOW",
"competitorRankAbsolute": 4
},
{
"intent": "navigational",
"volume": 30,
"keyword": "example organization",
"difficulty": 3,
"competitorEtv": 1.1,
"competitorUrl": "https://example.org/",
"competitorRank": 5,
"competitorRankAbsolute": 7
}
],
"dataAsOf": "2026-10-19T17:25:00Z",
"available": 147,
"competitor": "example.org",
"request_id": "01KEXAMPLE0000000000000000"
}
}
},
"schema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"input"
],
"properties": {
"input": {
"type": "object",
"required": [
"type",
"method",
"bodyType",
"body"
],
"properties": {
"body": {
"type": "object",
"required": [
"domain",
"competitor"
],
"properties": {
"limit": {
"type": "integer",
"maximum": 200,
"minimum": 1,
"description": "Maximum gap keywords to return (1-200; above 100 is lowered to 100 with a warning). Defaults to 20."
},
"domain": {
"type": "string",
"maxLength": 253,
"minLength": 1,
"description": "Your domain, e.g. example.com (no scheme or path; a leading www. is dropped)."
},
"country": {
"type": "string",
"maxLength": 64,
"description": "Optional ISO 3166-1 alpha-2 code or country name, used when locationCode is absent (uk = gb)."
},
"competitor": {
"type": "string",
"maxLength": 253,
"minLength": 1,
"description": "The competitor domain to compare against, e.g. example.org."
},
"languageCode": {
"type": "string",
"maxLength": 16,
"description": "Language code (2-letter). Defaults to en. An unsupported location falls back to 2840 (United States) with en (or the requested language if the United States offers it); a supported location with a language it does not offer uses that location's default language (en if offered). Either way market.fallback is true and market.warnings says what was used."
},
"locationCode": {
"type": "integer",
"description": "Google Ads location code (geo target ID). Defaults to 2840 (United States); an unsupported code falls back to 2840 (United States, market.fallback)."
}
}
},
"type": {
"type": "string",
"const": "http"
},
"method": {
"enum": [
"POST"
],
"type": "string"
},
"bodyType": {
"enum": [
"json",
"form-data",
"text"
],
"type": "string"
}
},
"additionalProperties": false
},
"output": {
"type": "object",
"required": [
"type"
],
"properties": {
"type": {
"type": "string"
},
"example": {
"type": "object"
}
}
}
}
}
}
},
"x402Version": 2
}Captured payload 19 of 44
{
"error": "Payment required",
"accepts": [
{
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"extra": {
"name": "USD Coin",
"version": "2"
},
"payTo": "0xCD673f7e1daD254347AEab6be0DEFe8b9C6b3A39",
"amount": "48000",
"scheme": "exact",
"network": "eip155:8453",
"maxTimeoutSeconds": 120
}
],
"resource": {
"url": "https://keywords.duoleads.com/v1/serp-competitors",
"tags": [
"serp-competitors",
"competitor-analysis",
"seo",
"serp-analysis",
"keyword-research"
],
"iconUrl": "https://keywords.duoleads.com/logo.png",
"mimeType": "application/json",
"description": "SERP competitors: the domains that rank in Google for a set of up to 100 keywords, each with average and median position, visibility, estimated traffic and how many of the keywords it ranks for; up to 100 domains in one $0.048 call. Use when you need who owns the search results of a topic. No data returns empty results (still charged). Bad input is free; upstream errors are not charged.",
"serviceName": "SEO SERP Competitors"
},
"extensions": {
"bazaar": {
"info": {
"input": {
"body": {
"limit": 2,
"keywords": [
"running shoes",
"trail running shoes"
],
"languageCode": "en",
"locationCode": 2840
},
"type": "http",
"method": "POST",
"bodyType": "json"
},
"output": {
"type": "json",
"example": {
"total": 2,
"units": "avgPosition / medianPosition: Google position across the keywords; visibility: 0-1 share of the keywords' results; etv: estimated monthly visits from these keywords; keywordsCount: keywords the domain ranks for; rating: provider ranking score",
"market": {
"country": "US",
"fallback": false,
"languageCode": "en",
"locationCode": 2840,
"locationName": "United States"
},
"source": "Google search results (estimates)",
"missing": [],
"results": [
{
"etv": 21840,
"domain": "example.com",
"rating": 188,
"visibility": 0.92,
"avgPosition": 1.5,
"keywordsCount": 2,
"medianPosition": 1.5,
"relevantSerpItems": 2
},
{
"etv": 5120.5,
"domain": "example.org",
"rating": 92,
"visibility": 0.41,
"avgPosition": 4,
"keywordsCount": 1,
"medianPosition": 4,
"relevantSerpItems": 1
}
],
"keywords": [
"running shoes",
"trail running shoes"
],
"available": 86,
"request_id": "01KEXAMPLE0000000000000000"
}
}
},
"schema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"input"
],
"properties": {
"input": {
"type": "object",
"required": [
"type",
"method",
"bodyType",
"body"
],
"properties": {
"body": {
"type": "object",
"required": [
"keywords"
],
"properties": {
"limit": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"description": "Maximum domains to return (1-100). Defaults to 20."
},
"country": {
"type": "string",
"maxLength": 64,
"description": "Optional ISO 3166-1 alpha-2 code or country name, used when locationCode is absent (uk = gb)."
},
"keywords": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 100,
"minItems": 1,
"description": "Keywords whose Google results to analyse (1-100; each at most 80 characters, normalised to lower case; one that is then empty, over 10 words or over 80 characters is listed in missing)."
},
"languageCode": {
"type": "string",
"maxLength": 16,
"description": "Language code (2-letter). Defaults to en. An unsupported location falls back to 2840 (United States) with en (or the requested language if the United States offers it); a supported location with a language it does not offer uses that location's default language (en if offered). Either way market.fallback is true and market.warnings says what was used."
},
"locationCode": {
"type": "integer",
"description": "Google Ads location code (geo target ID). Defaults to 2840 (United States); an unsupported code falls back to 2840 (United States, market.fallback)."
}
}
},
"type": {
"type": "string",
"const": "http"
},
"method": {
"enum": [
"POST"
],
"type": "string"
},
"bodyType": {
"enum": [
"json",
"form-data",
"text"
],
"type": "string"
}
},
"additionalProperties": false
},
"output": {
"type": "object",
"required": [
"type"
],
"properties": {
"type": {
"type": "string"
},
"example": {
"type": "object"
}
}
}
}
}
}
},
"x402Version": 2
}Captured payload 20 of 44
{
"error": "Payment required",
"accepts": [
{
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"extra": {
"name": "USD Coin",
"version": "2"
},
"payTo": "0xCD673f7e1daD254347AEab6be0DEFe8b9C6b3A39",
"amount": "48000",
"scheme": "exact",
"network": "eip155:8453",
"maxTimeoutSeconds": 120
}
],
"resource": {
"url": "https://keywords.duoleads.com/v1/relevant-pages",
"tags": [
"top-pages",
"relevant-pages",
"seo",
"content-audit",
"organic-traffic"
],
"iconUrl": "https://keywords.duoleads.com/logo.png",
"mimeType": "application/json",
"description": "Relevant pages: a domain's pages that get the most Google search traffic, each with its organic and paid ranking keywords, estimated monthly traffic, ad value and top-3/10/100 counts; up to 100 pages in one $0.048 call. Use when you need a site's top SEO pages (bare domain; www. is dropped). A domain with no data returns empty results (still charged). Bad input is free; upstream errors are not charged.",
"serviceName": "SEO Top Pages of a Domain"
},
"extensions": {
"bazaar": {
"info": {
"input": {
"body": {
"limit": 2,
"target": "example.com",
"languageCode": "en",
"locationCode": 2840
},
"type": "http",
"method": "POST",
"bodyType": "json"
},
"output": {
"type": "json",
"example": {
"total": 2,
"units": "keywords: ranking keywords; etv: estimated monthly organic (or paid) visits from Google; trafficCostUsd: estimated monthly cost of that traffic as ads, US dollars; pos1/top3/top10/top100: keywords ranking at position 1 / 1-3 / 1-10 / 1-100",
"market": {
"country": "US",
"fallback": false,
"languageCode": "en",
"locationCode": 2840,
"locationName": "United States"
},
"source": "Google search results (estimates)",
"target": "example.com",
"results": [
{
"page": "https://example.com/",
"organic": {
"etv": 226.37,
"pos1": 2,
"top3": 9,
"top10": 58,
"top100": 606,
"keywords": 606,
"trafficCostUsd": 701.5
}
},
{
"page": "https://example.com/about",
"organic": {
"etv": 80.1,
"pos1": 0,
"top3": 3,
"top10": 17,
"top100": 212,
"keywords": 212,
"trafficCostUsd": 190.25
}
}
],
"available": 79,
"request_id": "01KEXAMPLE0000000000000000"
}
}
},
"schema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"input"
],
"properties": {
"input": {
"type": "object",
"required": [
"type",
"method",
"bodyType",
"body"
],
"properties": {
"body": {
"type": "object",
"required": [
"target"
],
"properties": {
"limit": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"description": "Maximum pages to return (1-100). Defaults to 20."
},
"target": {
"type": "string",
"maxLength": 253,
"minLength": 1,
"description": "Bare domain like example.com (no scheme, path or port; a leading www. is dropped)."
},
"country": {
"type": "string",
"maxLength": 64,
"description": "Optional ISO 3166-1 alpha-2 code or country name, used when locationCode is absent (uk = gb)."
},
"languageCode": {
"type": "string",
"maxLength": 16,
"description": "Language code (2-letter). Defaults to en. An unsupported location falls back to 2840 (United States) with en (or the requested language if the United States offers it); a supported location with a language it does not offer uses that location's default language (en if offered). Either way market.fallback is true and market.warnings says what was used."
},
"locationCode": {
"type": "integer",
"description": "Google Ads location code (geo target ID). Defaults to 2840 (United States); an unsupported code falls back to 2840 (United States, market.fallback)."
}
}
},
"type": {
"type": "string",
"const": "http"
},
"method": {
"enum": [
"POST"
],
"type": "string"
},
"bodyType": {
"enum": [
"json",
"form-data",
"text"
],
"type": "string"
}
},
"additionalProperties": false
},
"output": {
"type": "object",
"required": [
"type"
],
"properties": {
"type": {
"type": "string"
},
"example": {
"type": "object"
}
}
}
}
}
}
},
"x402Version": 2
}Captured payload 21 of 44
{
"error": "Payment required",
"accepts": [
{
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"extra": {
"name": "USD Coin",
"version": "2"
},
"payTo": "0xCD673f7e1daD254347AEab6be0DEFe8b9C6b3A39",
"amount": "250000",
"scheme": "exact",
"network": "eip155:8453",
"maxTimeoutSeconds": 120
}
],
"resource": {
"url": "https://keywords.duoleads.com/v1/historical-rank",
"tags": [
"historical-rank",
"seo-history",
"seo",
"organic-traffic",
"domain-analytics"
],
"iconUrl": "https://keywords.duoleads.com/logo.png",
"mimeType": "application/json",
"description": "Historical rank: a domain's monthly Google visibility over the last 24 months: organic and paid ranking keywords, estimated traffic (etv), its ad value and position 1 / top 3 / top 10 / top 100 counts per month, in one $0.25 call. Use when you need a site's SEO trajectory, traffic drops or recoveries (bare domain; www. is dropped). A domain with no data returns an empty series (still charged). Bad input is free; upstream errors are not charged.",
"serviceName": "SEO Domain Rank History"
},
"extensions": {
"bazaar": {
"info": {
"input": {
"body": {
"target": "example.com",
"languageCode": "en",
"locationCode": 2840
},
"type": "http",
"method": "POST",
"bodyType": "json"
},
"output": {
"type": "json",
"example": {
"count": 2,
"units": "keywords: ranking keywords; etv: estimated monthly organic (or paid) visits from Google; trafficCostUsd: estimated monthly cost of that traffic as ads, US dollars; pos1/top3/top10/top100: keywords ranking at position 1 / 1-3 / 1-10 / 1-100; one entry per month, oldest first",
"market": {
"country": "US",
"fallback": false,
"languageCode": "en",
"locationCode": 2840,
"locationName": "United States"
},
"series": [
{
"year": 2026,
"month": 9,
"organic": {
"etv": 30210.5,
"pos1": 45,
"top3": 190,
"top10": 1302,
"top100": 9310,
"keywords": 9310,
"trafficCostUsd": 180110.2
}
},
{
"year": 2026,
"month": 10,
"organic": {
"etv": 31868.48,
"pos1": 48,
"top3": 196,
"top10": 1340,
"top100": 9528,
"keywords": 9528,
"trafficCostUsd": 193646.92
}
}
],
"source": "Google search results (estimates)",
"target": "example.com",
"dateFrom": "2024-12-01",
"request_id": "01KEXAMPLE0000000000000000"
}
}
},
"schema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"input"
],
"properties": {
"input": {
"type": "object",
"required": [
"type",
"method",
"bodyType",
"body"
],
"properties": {
"body": {
"type": "object",
"required": [
"target"
],
"properties": {
"target": {
"type": "string",
"maxLength": 253,
"minLength": 1,
"description": "Bare domain like example.com (no scheme, path or port; a leading www. is dropped)."
},
"country": {
"type": "string",
"maxLength": 64,
"description": "Optional ISO 3166-1 alpha-2 code or country name, used when locationCode is absent (uk = gb)."
},
"languageCode": {
"type": "string",
"maxLength": 16,
"description": "Language code (2-letter). Defaults to en. An unsupported location falls back to 2840 (United States) with en (or the requested language if the United States offers it); a supported location with a language it does not offer uses that location's default language (en if offered). Either way market.fallback is true and market.warnings says what was used."
},
"locationCode": {
"type": "integer",
"description": "Google Ads location code (geo target ID). Defaults to 2840 (United States); an unsupported code falls back to 2840 (United States, market.fallback)."
}
}
},
"type": {
"type": "string",
"const": "http"
},
"method": {
"enum": [
"POST"
],
"type": "string"
},
"bodyType": {
"enum": [
"json",
"form-data",
"text"
],
"type": "string"
}
},
"additionalProperties": false
},
"output": {
"type": "object",
"required": [
"type"
],
"properties": {
"type": {
"type": "string"
},
"example": {
"type": "object"
}
}
}
}
}
}
},
"x402Version": 2
}Captured payload 22 of 44
{
"error": "Payment required",
"accepts": [
{
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"extra": {
"name": "USD Coin",
"version": "2"
},
"payTo": "0xCD673f7e1daD254347AEab6be0DEFe8b9C6b3A39",
"amount": "48000",
"scheme": "exact",
"network": "eip155:8453",
"maxTimeoutSeconds": 120
}
],
"resource": {
"url": "https://keywords.duoleads.com/v1/page-intersection",
"tags": [
"page-intersection",
"content-gap",
"seo",
"competitor-analysis",
"keyword-research"
],
"iconUrl": "https://keywords.duoleads.com/logo.png",
"mimeType": "application/json",
"description": "Page intersection: the Google keywords that up to 20 pages all rank for (minus keywords of up to 10 excluded pages), with each page's position, URL and estimated traffic plus search volume, CPC, difficulty and intent; up to 100 keywords in one $0.048 call. Use when you need the shared keywords of competing pages. Rows are capped at 200 / pages (2 pages: 100, 20 pages: 10). No shared keywords returns empty results (still charged). Bad input is free; upstream errors are not charged.",
"serviceName": "SEO Page Keyword Intersection"
},
"extensions": {
"bazaar": {
"info": {
"input": {
"body": {
"limit": 2,
"pages": [
"https://example.com/guide",
"https://example.org/guide"
],
"languageCode": "en",
"locationCode": 2840
},
"type": "http",
"method": "POST",
"bodyType": "json"
},
"output": {
"type": "json",
"example": {
"pages": [
"https://example.com/guide",
"https://example.org/guide"
],
"total": 2,
"units": "ranks[].page: 1-based index into pages; position: rank among Google's organic results; etv: estimated monthly visits from that ranking; volume: average monthly Google searches; cpc: US dollars; competition: 0-1 (Google Ads); competitionLevel: LOW|MEDIUM|HIGH; difficulty: 0-100; intent: informational|navigational|commercial|transactional; trendYoyPct: % change vs a year ago",
"market": {
"country": "US",
"fallback": false,
"languageCode": "en",
"locationCode": 2840,
"locationName": "United States"
},
"source": "Google search results (estimates) and Google Ads data",
"results": [
{
"cpc": 1.2,
"ranks": [
{
"etv": 231,
"url": "https://example.com/guide",
"page": 1,
"type": "organic",
"position": 2,
"rankAbsolute": 3
},
{
"etv": 40.5,
"url": "https://example.org/guide",
"page": 2,
"type": "organic",
"position": 5,
"rankAbsolute": 7
}
],
"intent": "informational",
"volume": 1900,
"keyword": "example guide",
"difficulty": 41,
"competition": 0.02,
"trendYoyPct": 22,
"competitionLevel": "LOW"
},
{
"ranks": [
{
"etv": 12.3,
"url": "https://example.com/guide",
"page": 1,
"type": "organic",
"position": 4,
"rankAbsolute": 6
},
{
"etv": 1.1,
"url": "https://example.org/guide",
"page": 2,
"type": "organic",
"position": 9,
"rankAbsolute": 12
}
],
"intent": "informational",
"volume": 320,
"keyword": "example guide pdf",
"difficulty": 18
}
],
"dataAsOf": "2026-10-19T17:25:00Z",
"available": 147,
"request_id": "01KEXAMPLE0000000000000000"
}
}
},
"schema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"input"
],
"properties": {
"input": {
"type": "object",
"required": [
"type",
"method",
"bodyType",
"body"
],
"properties": {
"body": {
"type": "object",
"required": [
"pages"
],
"properties": {
"limit": {
"type": "integer",
"maximum": 200,
"minimum": 1,
"description": "Maximum keywords to return (1-200; lowered with a warning to 100, and to 200 / pages for more than 2 pages: 4 pages 50, 10 pages 20, 20 pages 10). Defaults to 20."
},
"pages": {
"type": "array",
"items": {
"type": "string",
"maxLength": 1000
},
"maxItems": 20,
"minItems": 1,
"description": "Page URLs whose shared ranking keywords to find (1-20), e.g. [\"https://example.com/guide\", \"https://example.org/guide\"]."
},
"country": {
"type": "string",
"maxLength": 64,
"description": "Optional ISO 3166-1 alpha-2 code or country name, used when locationCode is absent (uk = gb)."
},
"excludePages": {
"type": "array",
"items": {
"type": "string",
"maxLength": 1000
},
"maxItems": 10,
"minItems": 1,
"description": "Optional page URLs (1-10) to exclude: only keywords the pages rank for and these do not."
},
"languageCode": {
"type": "string",
"maxLength": 16,
"description": "Language code (2-letter). Defaults to en. An unsupported location falls back to 2840 (United States) with en (or the requested language if the United States offers it); a supported location with a language it does not offer uses that location's default language (en if offered). Either way market.fallback is true and market.warnings says what was used."
},
"locationCode": {
"type": "integer",
"description": "Google Ads location code (geo target ID). Defaults to 2840 (United States); an unsupported code falls back to 2840 (United States, market.fallback)."
}
}
},
"type": {
"type": "string",
"const": "http"
},
"method": {
"enum": [
"POST"
],
"type": "string"
},
"bodyType": {
"enum": [
"json",
"form-data",
"text"
],
"type": "string"
}
},
"additionalProperties": false
},
"output": {
"type": "object",
"required": [
"type"
],
"properties": {
"type": {
"type": "string"
},
"example": {
"type": "object"
}
}
}
}
}
}
},
"x402Version": 2
}Captured payload 23 of 44
{
"error": "Payment required",
"accepts": [
{
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"extra": {
"name": "USD Coin",
"version": "2"
},
"payTo": "0xCD673f7e1daD254347AEab6be0DEFe8b9C6b3A39",
"amount": "48000",
"scheme": "exact",
"network": "eip155:8453",
"maxTimeoutSeconds": 120
}
],
"resource": {
"url": "https://keywords.duoleads.com/v1/backlinks",
"tags": [
"backlinks",
"seo",
"domain-authority",
"link-building",
"referring-domains"
],
"iconUrl": "https://keywords.duoleads.com/logo.png",
"mimeType": "application/json",
"description": "Backlink profile of a domain: domain rank (0-1000), backlinks, referring domains, main domains, IPs and subnets, nofollow and broken links, spam score, first seen, and breakdowns by link type, TLD and country, from a web link index, in one $0.048 call. Use when you need a site's link authority at a glance. A domain with no links is an answer with zeros or no counts, which is still charged. Bad input is a free 400; a data source failure is not charged.",
"serviceName": "SEO Backlinks Profile"
},
"extensions": {
"bazaar": {
"info": {
"input": {
"body": {
"target": "example.com"
},
"type": "http",
"method": "POST",
"bodyType": "json"
},
"output": {
"type": "json",
"example": {
"units": "domainRank = 0-1000 (provider scale); counts = links, domains, pages, IPs or subnets; spamScore = 0-100; firstSeen = ISO 8601 UTC; linkTypes / topTlds / topCountries = backlinks per key (top 10).",
"source": "web link index",
"target": "example.com",
"topTlds": {
"de": 8292,
"com": 12682,
"net": 1551
},
"see_also": {
"params": [
"target"
],
"reason": "Want the domains behind these numbers? Call referring-domains for the same target.",
"endpoint": "https://keywords.duoleads.com/v1/referring-domains"
},
"backlinks": 28941,
"firstSeen": "2019-01-15T23:54:14Z",
"linkTypes": {
"image": 7230,
"anchor": 18723,
"redirect": 2985,
"canonical": 3
},
"spamScore": 16,
"domainRank": 512,
"request_id": "01KEXAMPLE0000000000000000",
"brokenPages": 15,
"referringIps": 2633,
"topCountries": {
"DE": 2651,
"US": 8342,
"unknown": 15828
},
"referringPages": 28256,
"brokenBacklinks": 215,
"referringDomains": 3429,
"referringSubnets": 1495,
"referringMainDomains": 3269,
"nofollowReferringDomains": 312
}
}
},
"schema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"input"
],
"properties": {
"input": {
"type": "object",
"required": [
"type",
"method",
"bodyType",
"body"
],
"properties": {
"body": {
"type": "object",
"required": [
"target"
],
"properties": {
"target": {
"type": "string",
"maxLength": 253,
"minLength": 1,
"description": "A domain like example.com (subdomains allowed). A site-root URL such as https://www.example.com/ is reduced to the domain; a path or port is refused."
}
}
},
"type": {
"type": "string",
"const": "http"
},
"method": {
"enum": [
"POST"
],
"type": "string"
},
"bodyType": {
"enum": [
"json",
"form-data",
"text"
],
"type": "string"
}
},
"additionalProperties": false
},
"output": {
"type": "object",
"required": [
"type"
],
"properties": {
"type": {
"type": "string"
},
"example": {
"type": "object"
}
}
}
}
}
}
},
"x402Version": 2
}Captured payload 24 of 44
{
"error": "Payment required",
"accepts": [
{
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"extra": {
"name": "USD Coin",
"version": "2"
},
"payTo": "0xCD673f7e1daD254347AEab6be0DEFe8b9C6b3A39",
"amount": "48000",
"scheme": "exact",
"network": "eip155:8453",
"maxTimeoutSeconds": 120
}
],
"resource": {
"url": "https://keywords.duoleads.com/v1/backlinks-list",
"tags": [
"backlinks",
"seo",
"link-audit",
"anchor-text",
"link-building"
],
"iconUrl": "https://keywords.duoleads.com/logo.png",
"mimeType": "application/json",
"description": "Backlinks of a domain, strongest first: linking page URL and domain, target URL, anchor text, link type, dofollow, first and last seen, and the rank (0-1000) of the linking domain and page, up to 100 rows per $0.048 call, optionally dofollow only, from a web link index. Use when auditing who links to a site. Anchors are the linking pages' own text. No links is an empty answer, which is still charged. Bad input is a free 400; a data source failure is not charged.",
"serviceName": "SEO Backlinks List"
},
"extensions": {
"bazaar": {
"info": {
"input": {
"body": {
"limit": 2,
"target": "example.com"
},
"type": "http",
"method": "POST",
"bodyType": "json"
},
"output": {
"type": "json",
"example": {
"total": 2,
"units": "domainRank / pageRank = 0-1000 (provider scale) of the linking domain / page; firstSeen / lastSeen = ISO 8601 UTC; available = backlinks in the index for the target.",
"source": "web link index",
"target": "example.com",
"results": [
{
"isNew": false,
"anchor": "Beispiel Webcube CMS",
"isLost": false,
"dofollow": true,
"lastSeen": "2025-11-16T18:51:04Z",
"linkType": "anchor",
"pageRank": 810,
"firstSeen": "2024-02-12T03:09:59Z",
"sourceUrl": "https://www.textil-beispiel.example/index.html",
"targetUrl": "https://www.example.com/",
"domainRank": 650,
"sourceDomain": "www.textil-beispiel.example"
},
{
"isNew": false,
"isLost": false,
"dofollow": true,
"lastSeen": "2026-09-17T20:33:18Z",
"linkType": "image",
"pageRank": 720,
"firstSeen": "2026-08-20T11:01:22Z",
"sourceUrl": "https://brightbrands.example/",
"targetUrl": "https://example.com/",
"domainRank": 550,
"sourceDomain": "brightbrands.example"
}
],
"see_also": {
"params": [
"target"
],
"reason": "Want the anchor texts across all of these links? Call backlink-anchors for the same target.",
"endpoint": "https://keywords.duoleads.com/v1/backlink-anchors"
},
"available": 5409,
"request_id": "01KEXAMPLE0000000000000000",
"dofollowOnly": false
}
}
},
"schema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"input"
],
"properties": {
"input": {
"type": "object",
"required": [
"type",
"method",
"bodyType",
"body"
],
"properties": {
"body": {
"type": "object",
"required": [
"target"
],
"properties": {
"limit": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"description": "Rows to return, 1-100. Default 20."
},
"target": {
"type": "string",
"maxLength": 253,
"minLength": 1,
"description": "A domain like example.com (subdomains allowed). A site-root URL such as https://www.example.com/ is reduced to the domain; a path or port is refused."
},
"dofollowOnly": {
"type": "boolean",
"description": "Only dofollow links. Default false."
}
}
},
"type": {
"type": "string",
"const": "http"
},
"method": {
"enum": [
"POST"
],
"type": "string"
},
"bodyType": {
"enum": [
"json",
"form-data",
"text"
],
"type": "string"
}
},
"additionalProperties": false
},
"output": {
"type": "object",
"required": [
"type"
],
"properties": {
"type": {
"type": "string"
},
"example": {
"type": "object"
}
}
}
}
}
}
},
"x402Version": 2
}Captured payload 25 of 44
{
"error": "Payment required",
"accepts": [
{
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"extra": {
"name": "USD Coin",
"version": "2"
},
"payTo": "0xCD673f7e1daD254347AEab6be0DEFe8b9C6b3A39",
"amount": "48000",
"scheme": "exact",
"network": "eip155:8453",
"maxTimeoutSeconds": 120
}
],
"resource": {
"url": "https://keywords.duoleads.com/v1/referring-domains",
"tags": [
"referring-domains",
"backlinks",
"seo",
"domain-authority",
"link-building"
],
"iconUrl": "https://keywords.duoleads.com/logo.png",
"mimeType": "application/json",
"description": "Domains linking to a domain, strongest first: each referring domain's rank (0-1000), backlinks and linking pages to the target, nofollow and broken links, first seen and spam score, up to 100 rows per $0.048 call, from a web link index. Use when sizing or comparing a site's link sources. No links is an empty answer, which is still charged. Bad input is a free 400; a data source failure is not charged.",
"serviceName": "SEO Referring Domains"
},
"extensions": {
"bazaar": {
"info": {
"input": {
"body": {
"limit": 2,
"target": "example.com"
},
"type": "http",
"method": "POST",
"bodyType": "json"
},
"output": {
"type": "json",
"example": {
"total": 2,
"units": "domainRank = 0-1000 (provider scale) of the referring domain; backlinks / referringPages = from that domain to the target; spamScore = 0-100; firstSeen = ISO 8601 UTC; available = referring domains in the index.",
"source": "web link index",
"target": "example.com",
"results": [
{
"domain": "beispiel-portal.example",
"backlinks": 76850,
"firstSeen": "2019-01-18T21:55:16Z",
"spamScore": 24,
"domainRank": 0,
"referringPages": 76844,
"brokenBacklinks": 0,
"nofollowReferringPages": 0
},
{
"domain": "news.example.org",
"backlinks": 1530,
"firstSeen": "2021-06-02T08:14:40Z",
"spamScore": 2,
"domainRank": 412,
"referringPages": 1488,
"brokenBacklinks": 3,
"nofollowReferringPages": 12
}
],
"see_also": {
"params": [
"target"
],
"reason": "Want the individual links with their anchors? Call backlinks-list for the same target.",
"endpoint": "https://keywords.duoleads.com/v1/backlinks-list"
},
"available": 45,
"request_id": "01KEXAMPLE0000000000000000"
}
}
},
"schema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"input"
],
"properties": {
"input": {
"type": "object",
"required": [
"type",
"method",
"bodyType",
"body"
],
"properties": {
"body": {
"type": "object",
"required": [
"target"
],
"properties": {
"limit": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"description": "Rows to return, 1-100. Default 20."
},
"target": {
"type": "string",
"maxLength": 253,
"minLength": 1,
"description": "A domain like example.com (subdomains allowed). A site-root URL such as https://www.example.com/ is reduced to the domain; a path or port is refused."
}
}
},
"type": {
"type": "string",
"const": "http"
},
"method": {
"enum": [
"POST"
],
"type": "string"
},
"bodyType": {
"enum": [
"json",
"form-data",
"text"
],
"type": "string"
}
},
"additionalProperties": false
},
"output": {
"type": "object",
"required": [
"type"
],
"properties": {
"type": {
"type": "string"
},
"example": {
"type": "object"
}
}
}
}
}
}
},
"x402Version": 2
}Captured payload 26 of 44
{
"error": "Payment required",
"accepts": [
{
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"extra": {
"name": "USD Coin",
"version": "2"
},
"payTo": "0xCD673f7e1daD254347AEab6be0DEFe8b9C6b3A39",
"amount": "48000",
"scheme": "exact",
"network": "eip155:8453",
"maxTimeoutSeconds": 120
}
],
"resource": {
"url": "https://keywords.duoleads.com/v1/backlinks-history",
"tags": [
"backlinks",
"seo",
"link-history",
"domain-authority",
"link-building"
],
"iconUrl": "https://keywords.duoleads.com/logo.png",
"mimeType": "application/json",
"description": "Monthly history of a domain's backlink profile: rank (0-1000), backlinks, new and lost backlinks, referring domains, new and lost referring domains and main domains per month, for up to 24 months (from 2019 on; default the last 24 months) per $0.048 call, from a web link index. Use when tracking link growth or a lost-link drop over time. No history is an empty answer, which is still charged. Bad input is a free 400; a data source failure is not charged.",
"serviceName": "SEO Backlinks History"
},
"extensions": {
"bazaar": {
"info": {
"input": {
"body": {
"dateTo": "2025-10-31",
"target": "example.com",
"dateFrom": "2025-09-01"
},
"type": "http",
"method": "POST",
"bodyType": "json"
},
"output": {
"type": "json",
"example": {
"total": 2,
"units": "One row per month, oldest first; date = end of the month (YYYY-MM-DD); domainRank = 0-1000 (provider scale); counts = links or domains (new / lost = in that month).",
"dateTo": "2025-10-31",
"source": "web link index",
"target": "example.com",
"results": [
{
"date": "2025-09-30",
"backlinks": 27612,
"domainRank": 498,
"newBacklinks": 1830,
"lostBacklinks": 1205,
"referringDomains": 3311,
"newReferringDomains": 141,
"lostReferringDomains": 96,
"referringMainDomains": 3160
},
{
"date": "2025-10-31",
"backlinks": 28390,
"domainRank": 505,
"newBacklinks": 2011,
"lostBacklinks": 1233,
"referringDomains": 3378,
"newReferringDomains": 158,
"lostReferringDomains": 91,
"referringMainDomains": 3221
}
],
"dateFrom": "2025-09-01",
"see_also": {
"params": [
"target"
],
"reason": "Want today's full profile with link types and countries? Call backlinks for the same target.",
"endpoint": "https://keywords.duoleads.com/v1/backlinks"
},
"request_id": "01KEXAMPLE0000000000000000"
}
}
},
"schema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"input"
],
"properties": {
"input": {
"type": "object",
"required": [
"type",
"method",
"bodyType",
"body"
],
"properties": {
"body": {
"type": "object",
"required": [
"target"
],
"properties": {
"dateTo": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "Last day, YYYY-MM-DD, after dateFrom and not after today (UTC). Default today."
},
"target": {
"type": "string",
"maxLength": 253,
"minLength": 1,
"description": "A domain like example.com (subdomains allowed). A site-root URL such as https://www.example.com/ is reduced to the domain; a path or port is refused."
},
"dateFrom": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "First day, YYYY-MM-DD, on or after 2019-01-01, at most 24 months before dateTo. Default 24 months before dateTo."
}
}
},
"type": {
"type": "string",
"const": "http"
},
"method": {
"enum": [
"POST"
],
"type": "string"
},
"bodyType": {
"enum": [
"json",
"form-data",
"text"
],
"type": "string"
}
},
"additionalProperties": false
},
"output": {
"type": "object",
"required": [
"type"
],
"properties": {
"type": {
"type": "string"
},
"example": {
"type": "object"
}
}
}
}
}
}
},
"x402Version": 2
}Captured payload 27 of 44
{
"error": "Payment required",
"accepts": [
{
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"extra": {
"name": "USD Coin",
"version": "2"
},
"payTo": "0xCD673f7e1daD254347AEab6be0DEFe8b9C6b3A39",
"amount": "48000",
"scheme": "exact",
"network": "eip155:8453",
"maxTimeoutSeconds": 120
}
],
"resource": {
"url": "https://keywords.duoleads.com/v1/backlink-anchors",
"tags": [
"anchor-text",
"backlinks",
"seo",
"link-audit",
"link-building"
],
"iconUrl": "https://keywords.duoleads.com/logo.png",
"mimeType": "application/json",
"description": "Anchor texts of the links to a domain, most used first: each anchor's backlinks, referring domains and main domains, nofollow domains and first seen, up to 100 rows per $0.048 call, from a web link index. Use when checking anchor-text distribution or over-optimisation. Anchors are the linking pages' own text. No links is an empty answer, which is still charged. Bad input is a free 400; a data source failure is not charged.",
"serviceName": "SEO Backlink Anchor Texts"
},
"extensions": {
"bazaar": {
"info": {
"input": {
"body": {
"limit": 2,
"target": "example.com"
},
"type": "http",
"method": "POST",
"bodyType": "json"
},
"output": {
"type": "json",
"example": {
"total": 2,
"units": "backlinks / referringDomains = links or domains using the anchor; firstSeen = ISO 8601 UTC; available = distinct anchors in the index.",
"source": "web link index",
"target": "example.com",
"results": [
{
"anchor": "example.com",
"backlinks": 692,
"firstSeen": "2022-07-16T17:04:31Z",
"referringDomains": 262,
"referringMainDomains": 257,
"nofollowReferringDomains": 155
},
{
"anchor": "example api",
"backlinks": 418,
"firstSeen": "2020-03-09T10:22:05Z",
"referringDomains": 97,
"referringMainDomains": 95,
"nofollowReferringDomains": 40
}
],
"see_also": {
"params": [
"target"
],
"reason": "Want the links behind an anchor? Call backlinks-list for the same target.",
"endpoint": "https://keywords.duoleads.com/v1/backlinks-list"
},
"available": 5413,
"request_id": "01KEXAMPLE0000000000000000"
}
}
},
"schema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"input"
],
"properties": {
"input": {
"type": "object",
"required": [
"type",
"method",
"bodyType",
"body"
],
"properties": {
"body": {
"type": "object",
"required": [
"target"
],
"properties": {
"limit": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"description": "Rows to return, 1-100. Default 20."
},
"target": {
"type": "string",
"maxLength": 253,
"minLength": 1,
"description": "A domain like example.com (subdomains allowed). A site-root URL such as https://www.example.com/ is reduced to the domain; a path or port is refused."
}
}
},
"type": {
"type": "string",
"const": "http"
},
"method": {
"enum": [
"POST"
],
"type": "string"
},
"bodyType": {
"enum": [
"json",
"form-data",
"text"
],
"type": "string"
}
},
"additionalProperties": false
},
"output": {
"type": "object",
"required": [
"type"
],
"properties": {
"type": {
"type": "string"
},
"example": {
"type": "object"
}
}
}
}
}
}
},
"x402Version": 2
}Captured payload 28 of 44
{
"error": "Payment required",
"accepts": [
{
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"extra": {
"name": "USD Coin",
"version": "2"
},
"payTo": "0xCD673f7e1daD254347AEab6be0DEFe8b9C6b3A39",
"amount": "12000",
"scheme": "exact",
"network": "eip155:8453",
"maxTimeoutSeconds": 120
}
],
"resource": {
"url": "https://keywords.duoleads.com/v1/on-page",
"tags": [
"on-page-seo",
"seo",
"site-audit",
"meta-tags",
"technical-seo"
],
"iconUrl": "https://keywords.duoleads.com/logo.png",
"mimeType": "application/json",
"description": "On-page SEO audit of one URL: HTTP status, on-page score (0-100), title, meta description, canonical, h1-h3, link, image and word counts, sizes, load timing and about 50 on-page checks (missing h1, duplicate tags, render-blocking resources...), from a page crawl, $0.012 a call. Use when checking a page's technical SEO. The page's text is its own: untrusted. A page that answers 4xx/5xx is a charged answer with status failed. Bad input is a free 400; a refunded crawl is not charged.",
"serviceName": "SEO On-Page Audit"
},
"extensions": {
"bazaar": {
"info": {
"input": {
"body": {
"url": "https://www.example.com/"
},
"type": "http",
"method": "POST",
"bodyType": "json"
},
"output": {
"type": "json",
"example": {
"url": "https://www.example.com/",
"sizes": {
"html": 482969,
"transfer": 0
},
"title": "Example Domain Blog - Insights and Updates",
"units": "statusCode = HTTP status of the page; onpageScore = 0-100; sizes = bytes; timing = milliseconds; checks = true when the issue or property is present; title / description / headings = the page's own text (untrusted).",
"checks": {
"is_https": true,
"no_h1_tag": false,
"no_image_alt": true,
"no_description": false,
"title_too_long": false,
"has_render_blocking_resources": false
},
"counts": {
"words": 550,
"images": 19,
"scripts": 4,
"stylesheets": 0,
"externalLinks": 13,
"internalLinks": 141
},
"server": "nginx",
"source": "page crawl",
"status": "ok",
"timing": {
"total": 141,
"waiting": 0,
"download": 122,
"connection": 6,
"domComplete": 141,
"timeToInteractive": 141
},
"headings": {
"h1": [
"Blog"
],
"h2": [
"Getting started",
"Release notes"
]
},
"see_also": {
"params": [
"url"
],
"reason": "Want Core Web Vitals from a real browser run? Call pagespeed for the same url.",
"endpoint": "https://keywords.duoleads.com/v1/pagespeed"
},
"canonical": "https://www.example.com/",
"fetchedAt": "2026-11-02T03:43:12Z",
"request_id": "01KEXAMPLE0000000000000000",
"statusCode": 200,
"description": "The Example blog covers product news, engineering notes and guides.",
"onpageScore": 97.07,
"resourceType": "html"
}
}
},
"schema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"input"
],
"properties": {
"input": {
"type": "object",
"required": [
"type",
"method",
"bodyType",
"body"
],
"properties": {
"body": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"maxLength": 2048,
"minLength": 1,
"description": "An http(s) URL of a public page (domain name, default port); without a scheme, https:// is assumed."
}
}
},
"type": {
"type": "string",
"const": "http"
},
"method": {
"enum": [
"POST"
],
"type": "string"
},
"bodyType": {
"enum": [
"json",
"form-data",
"text"
],
"type": "string"
}
},
"additionalProperties": false
},
"output": {
"type": "object",
"required": [
"type"
],
"properties": {
"type": {
"type": "string"
},
"example": {
"type": "object"
}
}
}
}
}
}
},
"x402Version": 2
}Captured payload 29 of 44
{
"error": "Payment required",
"accepts": [
{
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"extra": {
"name": "USD Coin",
"version": "2"
},
"payTo": "0xCD673f7e1daD254347AEab6be0DEFe8b9C6b3A39",
"amount": "18000",
"scheme": "exact",
"network": "eip155:8453",
"maxTimeoutSeconds": 120
}
],
"resource": {
"url": "https://keywords.duoleads.com/v1/pagespeed",
"tags": [
"pagespeed",
"seo",
"core-web-vitals",
"lighthouse",
"performance"
],
"iconUrl": "https://keywords.duoleads.com/logo.png",
"mimeType": "application/json",
"description": "Page speed of one URL from a real Lighthouse run: First Contentful Paint, Largest Contentful Paint, Total Blocking Time, Cumulative Layout Shift and Speed Index with their scores, the performance score when reported, final URL and version, mobile or desktop, $0.018 a call. Use when checking Core Web Vitals. A page that fails to load or whose report is too large is a charged answer (status failed / too_large). Bad input is a free 400; a refunded or failed run is not charged.",
"serviceName": "Page Speed Core Web Vitals"
},
"extensions": {
"bazaar": {
"info": {
"input": {
"body": {
"url": "https://www.example.com/",
"strategy": "mobile"
},
"type": "http",
"method": "POST",
"bodyType": "json"
},
"output": {
"type": "json",
"example": {
"url": "https://www.example.com/",
"units": "metrics: value in milliseconds (cumulativeLayoutShift unitless), score 0-1 (Lighthouse); performanceScore = 0-1; fetchedAt = ISO 8601 UTC.",
"source": "page crawl",
"status": "ok",
"metrics": {
"speedIndex": {
"score": 0.51,
"value": 2260.462
},
"totalBlockingTime": {
"score": 1,
"value": 5.5
},
"firstContentfulPaint": {
"score": 0.91,
"value": 891.209
},
"cumulativeLayoutShift": {
"score": 1,
"value": 0.005
},
"largestContentfulPaint": {
"score": 0.57,
"value": 2180.212
}
},
"finalUrl": "https://www.example.com/",
"see_also": {
"params": [
"url"
],
"reason": "Want the page's title, headings and on-page checks? Call on-page for the same url.",
"endpoint": "https://keywords.duoleads.com/v1/on-page"
},
"strategy": "mobile",
"fetchedAt": "2026-11-01T09:42:18Z",
"request_id": "01KEXAMPLE0000000000000000",
"lighthouseVersion": "13.4.0"
}
}
},
"schema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"input"
],
"properties": {
"input": {
"type": "object",
"required": [
"type",
"method",
"bodyType",
"body"
],
"properties": {
"body": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"maxLength": 2048,
"minLength": 1,
"description": "An http(s) URL of a public page (domain name, default port); without a scheme, https:// is assumed."
},
"strategy": {
"enum": [
"mobile",
"desktop"
],
"type": "string",
"description": "Device to emulate. Default mobile."
}
}
},
"type": {
"type": "string",
"const": "http"
},
"method": {
"enum": [
"POST"
],
"type": "string"
},
"bodyType": {
"enum": [
"json",
"form-data",
"text"
],
"type": "string"
}
},
"additionalProperties": false
},
"output": {
"type": "object",
"required": [
"type"
],
"properties": {
"type": {
"type": "string"
},
"example": {
"type": "object"
}
}
}
}
}
}
},
"x402Version": 2
}Captured payload 30 of 44
{
"error": "Payment required",
"accepts": [
{
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"extra": {
"name": "USD Coin",
"version": "2"
},
"payTo": "0xCD673f7e1daD254347AEab6be0DEFe8b9C6b3A39",
"amount": "18000",
"scheme": "exact",
"network": "eip155:8453",
"maxTimeoutSeconds": 120
}
],
"resource": {
"url": "https://keywords.duoleads.com/v1/maps-search",
"tags": [
"google-maps",
"seo",
"local-seo",
"places",
"serp"
],
"iconUrl": "https://keywords.duoleads.com/logo.png",
"mimeType": "application/json",
"description": "Google Maps places for a query in a country or around coordinates: up to 100 places with rank, name, category, address, phone, website, rating, review count, coordinates, price level and place id (no reviews or photos), from Google Maps, $0.018 a call. Use when building local-SEO or lead lists, or checking who ranks in a local search. No places is an empty answer, which is still charged. Bad input is a free 400; a data source failure is not charged.",
"serviceName": "Google Maps Places Search"
},
"extensions": {
"bazaar": {
"info": {
"input": {
"type": "http",
"method": "GET",
"queryParams": {
"q": "coffee shop",
"num": 2,
"country": "us"
}
},
"output": {
"type": "json",
"example": {
"q": "coffee shop",
"total": 2,
"units": "rank = position in the Maps results; rating = 0-5; reviewCount = number of ratings; coordinates = WGS84 degrees; priceLevel = as listed; dataAsOf = when the results were read (ISO 8601 UTC). Business facts as listed by the business.",
"market": {
"country": "US",
"languageCode": "en",
"locationCode": 2840
},
"source": "Google Maps",
"results": [
{
"name": "Example Roasters Cafe",
"rank": 1,
"phone": "+1 555-555-0101",
"rating": 4.6,
"address": "1 Example Ave, Springfield, EX 00001",
"placeId": "ChIJExamplePlace0001xxxxxxx",
"website": "https://www.exampleroasters.example/",
"category": "Coffee shop",
"priceLevel": "inexpensive",
"coordinates": {
"lat": 40.7128,
"lng": -74.006
},
"reviewCount": 1280
},
{
"name": "Sample Bean Coffee",
"rank": 2,
"phone": "+1 555-555-0102",
"rating": 4.4,
"address": "2 Sample St, Springfield, EX 00002",
"placeId": "ChIJExamplePlace0002xxxxxxx",
"category": "Cafe",
"coordinates": {
"lat": 40.7131,
"lng": -74.0071
},
"reviewCount": 310
}
],
"dataAsOf": "2026-11-02T08:20:47Z",
"see_also": {
"params": [
"country"
],
"reason": "Want more listings by category across a whole country? Call business-listings.",
"endpoint": "https://keywords.duoleads.com/v1/business-listings"
},
"request_id": "01KEXAMPLE0000000000000000"
}
}
},
"schema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"input"
],
"properties": {
"input": {
"type": "object",
"required": [
"type",
"method"
],
"properties": {
"type": {
"type": "string",
"const": "http"
},
"method": {
"enum": [
"GET"
],
"type": "string"
},
"queryParams": {
"type": "object",
"required": [
"q"
],
"properties": {
"q": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "What to look for (e.g. coffee shop), at most 200 characters."
},
"num": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"description": "Places to return, 1-100. Default 20."
},
"lang": {
"type": "string",
"maxLength": 16,
"minLength": 2,
"description": "Language code (with a country: one offered for it; with coordinates: a Google language code). Default: the country's main language when offered, else en."
},
"country": {
"type": "string",
"maxLength": 2,
"minLength": 2,
"description": "ISO 3166-1 alpha-2 country code (us, gb, de, ...; uk = gb). Default us. Leave out when coordinates are given."
},
"coordinates": {
"type": "string",
"maxLength": 40,
"minLength": 3,
"description": "Search around a point instead of a country: lat,lng or lat,lng,zoom: latitude -90..90, longitude -180..180 (up to 7 decimals), zoom 3-21 (default 14)."
}
}
}
},
"additionalProperties": false
},
"output": {
"type": "object",
"required": [
"type"
],
"properties": {
"type": {
"type": "string"
},
"example": {
"type": "object"
}
}
}
}
}
}
},
"x402Version": 2
}Captured payload 31 of 44
{
"error": "Payment required",
"accepts": [
{
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"extra": {
"name": "USD Coin",
"version": "2"
},
"payTo": "0xCD673f7e1daD254347AEab6be0DEFe8b9C6b3A39",
"amount": "40000",
"scheme": "exact",
"network": "eip155:8453",
"maxTimeoutSeconds": 120
}
],
"resource": {
"url": "https://keywords.duoleads.com/v1/amazon-keywords",
"tags": [
"amazon",
"seo",
"keyword-research",
"ecommerce",
"search-volume"
],
"iconUrl": "https://keywords.duoleads.com/logo.png",
"mimeType": "application/json",
"description": "Amazon keyword ideas for a seed: average monthly Amazon searches of the seed and of up to 100 related Amazon searches, each with its distance from the seed and the searches Amazon relates to it, US (or SA, AE, EG) market, from Amazon data, $0.04 a call. Use when researching product listing keywords or Amazon demand. A seed with no data is an empty answer, which is still charged. Bad input is a free 400; a data source failure is not charged.",
"serviceName": "Amazon Keyword Ideas Volume"
},
"extensions": {
"bazaar": {
"info": {
"input": {
"body": {
"limit": 2,
"keyword": "coffee maker"
},
"type": "http",
"method": "POST",
"bodyType": "json"
},
"output": {
"type": "json",
"example": {
"seed": "coffee maker",
"total": 2,
"units": "volume = average monthly Amazon searches; depth = steps from the seed (0 = the seed); dataAsOf = ISO 8601 UTC; available = related keywords found before the limit.",
"market": {
"country": "US",
"languageCode": "en",
"locationCode": 2840,
"locationName": "United States"
},
"source": "Amazon",
"results": [
{
"depth": 0,
"volume": 34183,
"keyword": "coffee maker",
"related": [
"coffee maker with grinder",
"single serve coffee maker",
"drip coffee maker"
]
},
{
"depth": 1,
"volume": 12210,
"keyword": "drip coffee maker",
"related": [
"coffee maker",
"programmable coffee maker"
]
}
],
"dataAsOf": "2026-10-03T12:25:21Z",
"see_also": {
"params": [
"keyword"
],
"reason": "Want the Google seasonality of a keyword? Call trend for its Google Trends interest over time.",
"endpoint": "https://keywords.duoleads.com/v1/trend"
},
"available": 7,
"request_id": "01KEXAMPLE0000000000000000",
"seedVolume": 34183
}
}
},
"schema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"input"
],
"properties": {
"input": {
"type": "object",
"required": [
"type",
"method",
"bodyType",
"body"
],
"properties": {
"body": {
"type": "object",
"required": [
"keyword"
],
"properties": {
"limit": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"description": "Rows to return, 1-100. Default 20."
},
"keyword": {
"type": "string",
"maxLength": 80,
"minLength": 1,
"description": "Seed keyword (at most 80 characters)."
},
"locationCode": {
"type": "integer",
"description": "Amazon market: 2682, 2784, 2818, 2840 (2840 = United States, 2682 Saudi Arabia, 2784 United Arab Emirates, 2818 Egypt). Default 2840."
}
}
},
"type": {
"type": "string",
"const": "http"
},
"method": {
"enum": [
"POST"
],
"type": "string"
},
"bodyType": {
"enum": [
"json",
"form-data",
"text"
],
"type": "string"
}
},
"additionalProperties": false
},
"output": {
"type": "object",
"required": [
"type"
],
"properties": {
"type": {
"type": "string"
},
"example": {
"type": "object"
}
}
}
}
}
}
},
"x402Version": 2
}Captured payload 32 of 44
{
"error": "Payment required",
"accepts": [
{
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"extra": {
"name": "USD Coin",
"version": "2"
},
"payTo": "0xCD673f7e1daD254347AEab6be0DEFe8b9C6b3A39",
"amount": "12000",
"scheme": "exact",
"network": "eip155:8453",
"maxTimeoutSeconds": 120
}
],
"resource": {
"url": "https://keywords.duoleads.com/v1/amazon-search",
"tags": [
"amazon",
"seo",
"product-search",
"ecommerce",
"serp"
],
"iconUrl": "https://keywords.duoleads.com/logo.png",
"mimeType": "application/json",
"description": "Amazon search results for a query: up to 100 products of the results page with position, ASIN, title, product link, sponsored flag, price, currency, rating and rating count, bought-past-month, Amazon's Choice and Best Seller badges, plus related searches, 18 Amazon stores (default US), from Amazon, $0.012 a call. Use when checking what ranks on Amazon for a search. No results is an empty answer, which is still charged. Bad input is a free 400; a data source failure is not charged.",
"serviceName": "Amazon Search Results Products"
},
"extensions": {
"bazaar": {
"info": {
"input": {
"body": {
"q": "coffee maker",
"limit": 2
},
"type": "http",
"method": "POST",
"bodyType": "json"
},
"output": {
"type": "json",
"example": {
"q": "coffee maker",
"total": 2,
"units": "rank = position on the results page (all blocks counted); price / priceTo in currency; rating = 0-5; boughtPastMonth = Amazon's figure; dataAsOf = ISO 8601 UTC; available = results Amazon reports.",
"market": {
"domain": "www.amazon.com",
"country": "US",
"languageCode": "en_US",
"locationCode": 2840
},
"source": "Amazon",
"results": [
{
"url": "https://www.amazon.com/dp/B0EXAMPLE1",
"asin": "B0EXAMPLE1",
"rank": 1,
"price": 49.99,
"title": "Example Brand 12-Cup Programmable Coffee Maker",
"rating": 4.6,
"currency": "USD",
"sponsored": false,
"bestSeller": false,
"ratingCount": 6100,
"amazonChoice": true,
"boughtPastMonth": 1000
},
{
"url": "https://www.amazon.com/dp/B0EXAMPLE2",
"asin": "B0EXAMPLE2",
"rank": 2,
"price": 39.98,
"title": "Example Brand Single Serve Coffee Maker",
"rating": 4.4,
"currency": "USD",
"sponsored": true,
"bestSeller": true,
"ratingCount": 10300,
"amazonChoice": false
}
],
"dataAsOf": "2026-11-02T23:38:22Z",
"see_also": {
"params": [
"locationCode"
],
"reason": "Want the Amazon search volume of this query and related searches? Call amazon-keywords with it as keyword.",
"endpoint": "https://keywords.duoleads.com/v1/amazon-keywords"
},
"available": 72484,
"request_id": "01KEXAMPLE0000000000000000",
"relatedSearches": [
"coffee maker with grinder",
"single serve coffee maker"
]
}
}
},
"schema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"input"
],
"properties": {
"input": {
"type": "object",
"required": [
"type",
"method",
"bodyType",
"body"
],
"properties": {
"body": {
"type": "object",
"required": [
"q"
],
"properties": {
"q": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "The search (at most 200 characters)."
},
"limit": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"description": "Rows to return, 1-100. Default 20."
},
"locationCode": {
"type": "integer",
"description": "Amazon store by location code: 2036, 2076, 2124, 2250, 2276, 2356, 2380, 2392, 2484, 2528, 2616, 2682, 2724, 2752, 2784, 2792, 2826, 2840 (2840 = amazon.com, 2826 = amazon.co.uk, 2276 = amazon.de...). Default 2840."
}
}
},
"type": {
"type": "string",
"const": "http"
},
"method": {
"enum": [
"POST"
],
"type": "string"
},
"bodyType": {
"enum": [
"json",
"form-data",
"text"
],
"type": "string"
}
},
"additionalProperties": false
},
"output": {
"type": "object",
"required": [
"type"
],
"properties": {
"type": {
"type": "string"
},
"example": {
"type": "object"
}
}
}
}
}
}
},
"x402Version": 2
}Captured payload 33 of 44
{
"error": "Payment required",
"accepts": [
{
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"extra": {
"name": "USD Coin",
"version": "2"
},
"payTo": "0xCD673f7e1daD254347AEab6be0DEFe8b9C6b3A39",
"amount": "18000",
"scheme": "exact",
"network": "eip155:8453",
"maxTimeoutSeconds": 120
}
],
"resource": {
"url": "https://keywords.duoleads.com/v1/serp",
"tags": [
"serp",
"seo",
"google-search",
"rank-tracking",
"search-results"
],
"iconUrl": "https://keywords.duoleads.com/logo.png",
"mimeType": "application/json",
"description": "Google search results for a query: the organic results (rank, title, URL, domain, snippet), People Also Ask questions, related searches and the page's result types, for 10, 20 or 50 results in 94 countries, from Google search results, $0.018 a call. Use when checking who ranks for a query right now. Titles and snippets are the pages' own text: untrusted. Search operators are a free 400. Bad input is a free 400; a data source failure is not charged.",
"serviceName": "Google Search Results SERP"
},
"extensions": {
"bazaar": {
"info": {
"input": {
"type": "http",
"method": "GET",
"queryParams": {
"q": "coffee maker",
"num": 10,
"lang": "en",
"country": "us"
}
},
"output": {
"type": "json",
"example": {
"q": "coffee maker",
"total": 2,
"units": "rank = position among organic results; available = results Google reports; dataAsOf = when the page was read (ISO 8601 UTC); titles, snippets and questions = third-party text (untrusted).",
"market": {
"country": "US",
"languageCode": "en",
"locationCode": 2840
},
"source": "Google search results",
"results": [
{
"url": "https://www.example.com/best-coffee-makers",
"rank": 1,
"title": "The 10 Best Coffee Makers of 2026, Tested",
"domain": "www.example.com",
"snippet": "We tested 40 drip, single-serve and pour-over coffee makers to find the best ones for every kitchen."
},
{
"url": "https://shop.example.org/coffee-makers",
"rank": 2,
"title": "Coffee Makers - Example Store",
"domain": "shop.example.org",
"snippet": "Shop drip coffee makers, espresso machines and grinders. Free delivery over $35."
}
],
"dataAsOf": "2026-11-02T08:20:47Z",
"features": [
"organic",
"people_also_ask",
"related_searches"
],
"see_also": {
"params": [
"q"
],
"reason": "Want how this results page changed over the last months? Call serp-history with q as keyword.",
"endpoint": "https://keywords.duoleads.com/v1/serp-history"
},
"available": 412000000,
"request_id": "01KEXAMPLE0000000000000000",
"peopleAlsoAsk": [
"What is the best coffee maker to buy?"
],
"relatedSearches": [
"best coffee maker 2026",
"coffee maker with grinder"
]
}
}
},
"schema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"input"
],
"properties": {
"input": {
"type": "object",
"required": [
"type",
"method"
],
"properties": {
"type": {
"type": "string",
"const": "http"
},
"method": {
"enum": [
"GET"
],
"type": "string"
},
"queryParams": {
"type": "object",
"required": [
"q"
],
"properties": {
"q": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "Search query, at most 200 characters. Search operators (site:, inurl:, quotes, -word, ...) are refused free."
},
"num": {
"type": "integer",
"maximum": 50,
"minimum": 10,
"description": "Results: 10, 20 or 50. Default 10."
},
"lang": {
"type": "string",
"maxLength": 16,
"minLength": 2,
"description": "Language code (one offered for the country, as GET /v1/search-volume). Default: the country's main language when offered, else en."
},
"country": {
"type": "string",
"maxLength": 2,
"minLength": 2,
"description": "ISO 3166-1 alpha-2 country code (us, gb, de, ...; uk = gb). Default us."
}
}
}
},
"additionalProperties": false
},
"output": {
"type": "object",
"required": [
"type"
],
"properties": {
"type": {
"type": "string"
},
"example": {
"type": "object"
}
}
}
}
}
}
},
"x402Version": 2
}Captured payload 34 of 44
{
"error": "Payment required",
"accepts": [
{
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"extra": {
"name": "USD Coin",
"version": "2"
},
"payTo": "0xCD673f7e1daD254347AEab6be0DEFe8b9C6b3A39",
"amount": "18000",
"scheme": "exact",
"network": "eip155:8453",
"maxTimeoutSeconds": 120
}
],
"resource": {
"url": "https://keywords.duoleads.com/v1/serp-history",
"tags": [
"serp-history",
"seo",
"rank-tracking",
"serp",
"google-search"
],
"iconUrl": "https://keywords.duoleads.com/logo.png",
"mimeType": "application/json",
"description": "Google results page of a keyword as it was in the past: the first snapshot (about one a month) in a window of up to 31 days within the last year, with its top 10 organic results (rank, URL, domain, title), result count and result types, from Google search results, $0.018 a call. Use when checking how rankings for a keyword moved month by month. Titles are untrusted third-party text. No snapshot is an empty answer, still charged. Bad input is a free 400; a data source failure is not charged.",
"serviceName": "Google SERP History"
},
"extensions": {
"bazaar": {
"info": {
"input": {
"body": {
"keyword": "coffee maker"
},
"type": "http",
"method": "POST",
"bodyType": "json"
},
"output": {
"type": "json",
"example": {
"total": 1,
"units": "One snapshot (the first in the window; about one a month); date = when the page was read (YYYY-MM-DD); rank = position among organic results then; resultsCount = results Google reported; titles = third-party text (untrusted).",
"dateTo": "2026-11-02",
"market": {
"country": "US",
"fallback": false,
"languageCode": "en",
"locationCode": 2840,
"locationName": "United States"
},
"source": "Google search results",
"keyword": "coffee maker",
"results": [
{
"date": "2026-10-04",
"results": [
{
"url": "https://www.example.com/best-coffee-makers",
"rank": 1,
"title": "The Best Coffee Makers",
"domain": "www.example.com"
},
{
"url": "https://shop.example.org/coffee-makers",
"rank": 2,
"title": "Coffee Makers - Example Store",
"domain": "shop.example.org"
}
],
"features": [
"organic",
"people_also_ask",
"related_searches"
],
"resultsCount": 83600000
}
],
"dateFrom": "2026-10-03",
"see_also": {
"params": [
"keyword"
],
"reason": "Want today's results page? Call serp with the keyword as q.",
"endpoint": "https://keywords.duoleads.com/v1/serp"
},
"request_id": "01KEXAMPLE0000000000000000"
}
}
},
"schema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"input"
],
"properties": {
"input": {
"type": "object",
"required": [
"type",
"method",
"bodyType",
"body"
],
"properties": {
"body": {
"type": "object",
"required": [
"keyword"
],
"properties": {
"dateTo": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "Last day, YYYY-MM-DD, not after today (UTC). Default today."
},
"country": {
"type": "string",
"maxLength": 64,
"description": "Optional ISO 3166-1 alpha-2 code or country name, used when locationCode is absent (uk = gb)."
},
"keyword": {
"type": "string",
"maxLength": 80,
"minLength": 1,
"description": "The keyword (at most 80 characters, up to 10 words)."
},
"dateFrom": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "First day, YYYY-MM-DD, at most 365 days ago and at most 31 days before dateTo (window). Default 30 days before dateTo."
},
"languageCode": {
"type": "string",
"maxLength": 16,
"description": "Language code (2-letter). Defaults to en. An unsupported location falls back to 2840 (United States) with en (or the requested language if the United States offers it); a supported location with a language it does not offer uses that location's default language (en if offered). Either way market.fallback is true and market.warnings says what was used."
},
"locationCode": {
"type": "integer",
"description": "Google Ads location code (geo target ID). Defaults to 2840 (United States); an unsupported code falls back to 2840 (United States, market.fallback)."
}
}
},
"type": {
"type": "string",
"const": "http"
},
"method": {
"enum": [
"POST"
],
"type": "string"
},
"bodyType": {
"enum": [
"json",
"form-data",
"text"
],
"type": "string"
}
},
"additionalProperties": false
},
"output": {
"type": "object",
"required": [
"type"
],
"properties": {
"type": {
"type": "string"
},
"example": {
"type": "object"
}
}
}
}
}
}
},
"x402Version": 2
}Captured payload 35 of 44
{
"error": "Payment required",
"accepts": [
{
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"extra": {
"name": "USD Coin",
"version": "2"
},
"payTo": "0xCD673f7e1daD254347AEab6be0DEFe8b9C6b3A39",
"amount": "18000",
"scheme": "exact",
"network": "eip155:8453",
"maxTimeoutSeconds": 120
}
],
"resource": {
"url": "https://keywords.duoleads.com/v1/bing-serp",
"tags": [
"serp",
"seo",
"bing-search",
"rank-tracking",
"search-results"
],
"iconUrl": "https://keywords.duoleads.com/logo.png",
"mimeType": "application/json",
"description": "Bing search results for a query: the organic results (rank, title, URL, domain, snippet), related searches and the page's result types, for 10, 20 or 50 results in 94 countries and Bing's 49 languages, from Bing search results, $0.018 a call. Use when checking rankings on Bing (and the engines it feeds). Titles and snippets are the pages' own text: untrusted. Search operators are a free 400. Bad input is a free 400; a data source failure is not charged.",
"serviceName": "Bing Search Results SERP"
},
"extensions": {
"bazaar": {
"info": {
"input": {
"type": "http",
"method": "GET",
"queryParams": {
"q": "coffee maker",
"num": 10,
"lang": "en",
"country": "us"
}
},
"output": {
"type": "json",
"example": {
"q": "coffee maker",
"total": 2,
"units": "rank = position among organic results; available = results Bing reports; dataAsOf = when the page was read (ISO 8601 UTC); titles and snippets = third-party text (untrusted).",
"market": {
"country": "US",
"languageCode": "en",
"locationCode": 2840
},
"source": "Bing search results",
"results": [
{
"url": "https://shop.example.org/coffee-makers",
"rank": 1,
"title": "Coffee Makers - Example Store",
"domain": "shop.example.org",
"snippet": "Shop drip coffee makers, espresso machines and grinders."
},
{
"url": "https://www.example.com/best-coffee-makers",
"rank": 2,
"title": "Best Coffee Makers 2026 | Example Reviews",
"domain": "www.example.com",
"snippet": "Our picks after testing 40 machines."
}
],
"dataAsOf": "2026-11-01T08:55:52Z",
"features": [
"organic",
"related_searches"
],
"see_also": {
"params": [
"q",
"country"
],
"reason": "Want the Google results for the same query? Call serp.",
"endpoint": "https://keywords.duoleads.com/v1/serp"
},
"available": 152000,
"request_id": "01KEXAMPLE0000000000000000",
"relatedSearches": [
"best coffee maker",
"coffee maker with grinder"
]
}
}
},
"schema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"input"
],
"properties": {
"input": {
"type": "object",
"required": [
"type",
"method"
],
"properties": {
"type": {
"type": "string",
"const": "http"
},
"method": {
"enum": [
"GET"
],
"type": "string"
},
"queryParams": {
"type": "object",
"required": [
"q"
],
"properties": {
"q": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "Search query, at most 200 characters. Search operators (site:, inurl:, quotes, -word, ...) are refused free."
},
"num": {
"type": "integer",
"maximum": 50,
"minimum": 10,
"description": "Results: 10, 20 or 50. Default 10."
},
"lang": {
"type": "string",
"maxLength": 16,
"minLength": 2,
"description": "Language code (a Bing language: en, en-GB, de, fr, es, pt-BR, ...). Default: the country's main language when offered, else en."
},
"country": {
"type": "string",
"maxLength": 2,
"minLength": 2,
"description": "ISO 3166-1 alpha-2 country code (us, gb, de, ...; uk = gb). Default us."
}
}
}
},
"additionalProperties": false
},
"output": {
"type": "object",
"required": [
"type"
],
"properties": {
"type": {
"type": "string"
},
"example": {
"type": "object"
}
}
}
}
}
}
},
"x402Version": 2
}Captured payload 36 of 44
{
"error": "Payment required",
"accepts": [
{
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"extra": {
"name": "USD Coin",
"version": "2"
},
"payTo": "0xCD673f7e1daD254347AEab6be0DEFe8b9C6b3A39",
"amount": "80000",
"scheme": "exact",
"network": "eip155:8453",
"maxTimeoutSeconds": 120
}
],
"resource": {
"url": "https://keywords.duoleads.com/v1/business-listings",
"tags": [
"business-listings",
"seo",
"local-seo",
"google-maps",
"lead-generation"
],
"iconUrl": "https://keywords.duoleads.com/logo.png",
"mimeType": "application/json",
"description": "Businesses listed on Google Maps by name and/or category in a country, optionally within a radius of a point: up to 50 with name, category, address, phone, website, rating, review count, coordinates, price level and place id (no reviews or photos), from Google Maps business listings, $0.08 a call. Use when building local lead lists or auditing a market. No match is an empty answer, still charged. Bad input is a free 400; a data source failure is not charged.",
"serviceName": "Google Business Listings Search"
},
"extensions": {
"bazaar": {
"info": {
"input": {
"body": {
"limit": 2,
"country": "US",
"category": "coffee_shop",
"coordinates": "40.7128,-74.006,5"
},
"type": "http",
"method": "POST",
"bodyType": "json"
},
"output": {
"type": "json",
"example": {
"total": 2,
"units": "rating = 0-5; reviewCount = number of ratings; coordinates = WGS84 degrees; priceLevel = as listed; available = listings matching the search. Business facts as listed by the business.",
"source": "Google Maps business listings",
"country": "US",
"results": [
{
"name": "Example Roasters Cafe",
"phone": "+1 555-555-0101",
"rating": 4.6,
"address": "1 Example Ave, Springfield, EX 00001",
"placeId": "ChIJExamplePlace0001xxxxxxx",
"website": "https://www.exampleroasters.example/",
"category": "Coffee shop",
"coordinates": {
"lat": 40.7128,
"lng": -74.006
},
"reviewCount": 1280
},
{
"name": "Sample Bean Coffee",
"rating": 4.4,
"address": "2 Sample St, Springfield, EX 00002",
"placeId": "ChIJExamplePlace0002xxxxxxx",
"category": "Coffee shop",
"coordinates": {
"lat": 40.7131,
"lng": -74.0071
},
"reviewCount": 310
}
],
"category": "coffee_shop",
"see_also": {
"params": [
"country"
],
"reason": "Want what ranks in a Google Maps search for a query? Call maps-search.",
"endpoint": "https://keywords.duoleads.com/v1/maps-search"
},
"available": 61,
"request_id": "01KEXAMPLE0000000000000000",
"coordinates": "40.7128,-74.006,5"
}
}
},
"schema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"input"
],
"properties": {
"input": {
"type": "object",
"required": [
"type",
"method",
"bodyType",
"body"
],
"properties": {
"body": {
"type": "object",
"required": [
"country"
],
"properties": {
"q": {
"type": "string",
"maxLength": 100,
"minLength": 1,
"description": "Words in the business name (at most 100 characters). q or category is required."
},
"limit": {
"type": "integer",
"maximum": 50,
"minimum": 1,
"description": "Rows to return, 1-50. Default 20."
},
"country": {
"type": "string",
"maxLength": 2,
"minLength": 2,
"description": "ISO 3166-1 alpha-2 country code of the businesses (us, gb, de, ...)."
},
"category": {
"type": "string",
"maxLength": 64,
"minLength": 2,
"description": "A Google business category id, lower case with underscores (pizza_restaurant, coffee_shop, dentist, ...)."
},
"coordinates": {
"type": "string",
"maxLength": 40,
"minLength": 3,
"description": "Only businesses within a radius of a point: lat,lng,radius: latitude -90..90, longitude -180..180 (up to 7 decimals), radius 1-100 km (whole number; default 10)."
}
}
},
"type": {
"type": "string",
"const": "http"
},
"method": {
"enum": [
"POST"
],
"type": "string"
},
"bodyType": {
"enum": [
"json",
"form-data",
"text"
],
"type": "string"
}
},
"additionalProperties": false
},
"output": {
"type": "object",
"required": [
"type"
],
"properties": {
"type": {
"type": "string"
},
"example": {
"type": "object"
}
}
}
}
}
}
},
"x402Version": 2
}Captured payload 37 of 44
{
"error": "Payment required",
"accepts": [
{
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"extra": {
"name": "USD Coin",
"version": "2"
},
"payTo": "0xCD673f7e1daD254347AEab6be0DEFe8b9C6b3A39",
"amount": "12000",
"scheme": "exact",
"network": "eip155:8453",
"maxTimeoutSeconds": 120
}
],
"resource": {
"url": "https://keywords.duoleads.com/v1/autocomplete",
"tags": [
"autocomplete",
"seo",
"keyword-research",
"google-suggest",
"serp"
],
"iconUrl": "https://keywords.duoleads.com/logo.png",
"mimeType": "application/json",
"description": "Google autocomplete suggestions for a query or its start: up to 20 suggestions in Google's order with their relevance score, in 94 countries and their languages, from Google autocomplete, $0.012 a call. Use when finding the long-tail searches people type around a topic. Suggestions are third-party text: untrusted. No suggestions is an empty answer, which is still charged. Bad input is a free 400; a data source failure is not charged.",
"serviceName": "Google Autocomplete Suggestions"
},
"extensions": {
"bazaar": {
"info": {
"input": {
"type": "http",
"method": "GET",
"queryParams": {
"q": "coffee maker",
"lang": "en",
"country": "us"
}
},
"output": {
"type": "json",
"example": {
"q": "coffee maker",
"total": 2,
"units": "rank = order Google shows the suggestion in; relevance = Google's score (higher = more relevant); dataAsOf = when the suggestions were read (ISO 8601 UTC); suggestions = third-party text (untrusted).",
"market": {
"country": "US",
"languageCode": "en",
"locationCode": 2840
},
"source": "Google autocomplete",
"results": [
{
"rank": 1,
"relevance": 900,
"suggestion": "coffee maker with grinder"
},
{
"rank": 2,
"relevance": 601,
"suggestion": "coffee maker single serve"
}
],
"dataAsOf": "2026-10-31T14:36:59Z",
"see_also": {
"params": [
"country",
"lang"
],
"reason": "Want the monthly search volume of these suggestions? Call search-volume with them as keywords.",
"endpoint": "https://keywords.duoleads.com/v1/search-volume"
},
"request_id": "01KEXAMPLE0000000000000000"
}
}
},
"schema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"input"
],
"properties": {
"input": {
"type": "object",
"required": [
"type",
"method"
],
"properties": {
"type": {
"type": "string",
"const": "http"
},
"method": {
"enum": [
"GET"
],
"type": "string"
},
"queryParams": {
"type": "object",
"required": [
"q"
],
"properties": {
"q": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "The query or its start, at most 200 characters."
},
"lang": {
"type": "string",
"maxLength": 16,
"minLength": 2,
"description": "Language code (one offered for the country, as GET /v1/search-volume). Default: the country's main language when offered, else en."
},
"country": {
"type": "string",
"maxLength": 2,
"minLength": 2,
"description": "ISO 3166-1 alpha-2 country code (us, gb, de, ...; uk = gb). Default us."
}
}
}
},
"additionalProperties": false
},
"output": {
"type": "object",
"required": [
"type"
],
"properties": {
"type": {
"type": "string"
},
"example": {
"type": "object"
}
}
}
}
}
}
},
"x402Version": 2
}Captured payload 38 of 44
{
"error": "Payment required",
"accepts": [
{
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"extra": {
"name": "USD Coin",
"version": "2"
},
"payTo": "0xCD673f7e1daD254347AEab6be0DEFe8b9C6b3A39",
"amount": "12000",
"scheme": "exact",
"network": "eip155:8453",
"maxTimeoutSeconds": 120
}
],
"resource": {
"url": "https://keywords.duoleads.com/v1/youtube-search",
"tags": [
"youtube",
"seo",
"video-seo",
"serp",
"rank-tracking"
],
"iconUrl": "https://keywords.duoleads.com/logo.png",
"mimeType": "application/json",
"description": "YouTube search results for a query: up to 20 or 40 videos with rank, video id and link, title, channel name and id, views, publication date and duration, in 94 countries, from YouTube search results, $0.012 a call. Use when checking which videos rank on YouTube for a topic. Titles and channel names are third-party text: untrusted; no comments. No results is an empty answer, which is still charged. Bad input is a free 400; a data source failure is not charged.",
"serviceName": "YouTube Search Results"
},
"extensions": {
"bazaar": {
"info": {
"input": {
"type": "http",
"method": "GET",
"queryParams": {
"q": "coffee maker review",
"num": 20,
"lang": "en",
"country": "us"
}
},
"output": {
"type": "json",
"example": {
"q": "coffee maker review",
"total": 2,
"units": "rank = position on the results page; views = view count; publishedAt = ISO 8601 UTC, estimated from YouTube's relative date; durationSeconds = seconds; titles and channel names = third-party text (untrusted).",
"market": {
"country": "US",
"languageCode": "en",
"locationCode": 2840
},
"source": "YouTube search results",
"results": [
{
"url": "https://www.youtube.com/watch?v=AAAAAAAAAA1",
"rank": 1,
"title": "Best Coffee Makers 2026 - Tested and Reviewed",
"views": 45492,
"channel": "Example Kitchen Lab",
"videoId": "AAAAAAAAAA1",
"channelId": "UCexampleChannel000000aa",
"publishedAt": "2026-10-02T05:07:47Z",
"durationSeconds": 873
},
{
"url": "https://www.youtube.com/watch?v=AAAAAAAAAA2",
"rank": 2,
"title": "Drip vs Pour-Over: Which Coffee Maker?",
"views": 338619,
"channel": "Example Coffee Channel",
"videoId": "AAAAAAAAAA2",
"channelId": "UCexampleChannel000000bb",
"publishedAt": "2026-05-02T05:07:47Z",
"durationSeconds": 3046
}
],
"dataAsOf": "2026-11-02T05:07:47Z",
"see_also": {
"params": [
"q",
"country",
"lang"
],
"reason": "Want the Google results for the same query? Call serp.",
"endpoint": "https://keywords.duoleads.com/v1/serp"
},
"available": 15803993,
"request_id": "01KEXAMPLE0000000000000000"
}
}
},
"schema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"input"
],
"properties": {
"input": {
"type": "object",
"required": [
"type",
"method"
],
"properties": {
"type": {
"type": "string",
"const": "http"
},
"method": {
"enum": [
"GET"
],
"type": "string"
},
"queryParams": {
"type": "object",
"required": [
"q"
],
"properties": {
"q": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "Search query, at most 200 characters. Search operators (site:, inurl:, quotes, -word, ...) are refused free."
},
"num": {
"type": "integer",
"maximum": 40,
"minimum": 20,
"description": "Videos: 20 or 40. Default 20."
},
"lang": {
"type": "string",
"maxLength": 16,
"minLength": 2,
"description": "Language code (a YouTube language: en, de, fr, es, pt-BR, ja, ...). Default: the country's main language when offered, else en."
},
"country": {
"type": "string",
"maxLength": 2,
"minLength": 2,
"description": "ISO 3166-1 alpha-2 country code (us, gb, de, ...; uk = gb). Default us."
}
}
}
},
"additionalProperties": false
},
"output": {
"type": "object",
"required": [
"type"
],
"properties": {
"type": {
"type": "string"
},
"example": {
"type": "object"
}
}
}
}
}
}
},
"x402Version": 2
}Captured payload 39 of 44
{
"error": "Payment required",
"accepts": [
{
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"extra": {
"name": "USD Coin",
"version": "2"
},
"payTo": "0xCD673f7e1daD254347AEab6be0DEFe8b9C6b3A39",
"amount": "160000",
"scheme": "exact",
"network": "eip155:8453",
"maxTimeoutSeconds": 120
}
],
"resource": {
"url": "https://keywords.duoleads.com/v1/google-ads-keywords",
"tags": [
"google-ads",
"seo",
"keyword-research",
"ppc",
"keyword-planner"
],
"iconUrl": "https://keywords.duoleads.com/logo.png",
"mimeType": "application/json",
"description": "Google Ads keyword ideas for up to 20 seed keywords: up to 100 ideas, highest search volume first, with monthly volume, CPC, competition and top-of-page bid range (optional monthly history), in 94 countries, from Google Ads data, $0.16 a call. Use when planning a paid or SEO keyword list from Google's own planner. Over the source's 12 calls a minute: a free 503 with Retry-After. Bad input is a free 400; a data source failure is not charged.",
"serviceName": "Google Ads Keyword Ideas"
},
"extensions": {
"bazaar": {
"info": {
"input": {
"body": {
"limit": 2,
"keywords": [
"coffee maker"
]
},
"type": "http",
"method": "POST",
"bodyType": "json"
},
"output": {
"type": "json",
"example": {
"seeds": [
"coffee maker"
],
"total": 2,
"units": "volume = average monthly Google searches; cpc and bids = US dollars; competition = Google Ads competition level; competitionIndex = 0-100; monthly = searches per month, oldest first.",
"market": {
"country": "US",
"fallback": false,
"languageCode": "en",
"locationCode": 2840,
"locationName": "United States"
},
"source": "Google Ads data",
"results": [
{
"cpc": 1.2,
"volume": 246000,
"keyword": "coffee maker",
"competition": "high",
"lowTopOfPageBid": 0.45,
"competitionIndex": 100,
"highTopOfPageBid": 1.93
},
{
"cpc": 1.05,
"volume": 74000,
"keyword": "best coffee maker",
"competition": "high",
"lowTopOfPageBid": 0.4,
"competitionIndex": 92,
"highTopOfPageBid": 1.55
}
],
"see_also": {
"params": [
"keywords"
],
"reason": "Want how hard these ideas are to rank for? Call keyword-difficulty with them.",
"endpoint": "https://keywords.duoleads.com/v1/keyword-difficulty"
},
"request_id": "01KEXAMPLE0000000000000000"
}
}
},
"schema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"input"
],
"properties": {
"input": {
"type": "object",
"required": [
"type",
"method",
"bodyType",
"body"
],
"properties": {
"body": {
"type": "object",
"required": [
"keywords"
],
"properties": {
"limit": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"description": "Ideas to return, 1-100. Default 100."
},
"country": {
"type": "string",
"maxLength": 64,
"description": "Optional ISO 3166-1 alpha-2 code or country name, used when locationCode is absent (uk = gb)."
},
"keywords": {
"type": "array",
"items": {
"type": "string",
"maxLength": 80
},
"maxItems": 20,
"minItems": 1,
"description": "Seed keywords (1-20; each at most 80 characters; one that cannot be looked up is listed in missing)."
},
"languageCode": {
"type": "string",
"maxLength": 16,
"description": "Language code (2-letter). Defaults to en. An unsupported location falls back to 2840 (United States) with en (or the requested language if the United States offers it); a supported location with a language it does not offer uses that location's default language (en if offered). Either way market.fallback is true and market.warnings says what was used."
},
"locationCode": {
"type": "integer",
"description": "Google Ads location code (geo target ID). Defaults to 2840 (United States); an unsupported code falls back to 2840 (United States, market.fallback)."
},
"includeMonthly": {
"type": "boolean",
"description": "Add each idea's monthly search volumes."
}
}
},
"type": {
"type": "string",
"const": "http"
},
"method": {
"enum": [
"POST"
],
"type": "string"
},
"bodyType": {
"enum": [
"json",
"form-data",
"text"
],
"type": "string"
}
},
"additionalProperties": false
},
"output": {
"type": "object",
"required": [
"type"
],
"properties": {
"type": {
"type": "string"
},
"example": {
"type": "object"
}
}
}
}
}
}
},
"x402Version": 2
}Captured payload 40 of 44
{
"error": "Payment required",
"accepts": [
{
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"extra": {
"name": "USD Coin",
"version": "2"
},
"payTo": "0xCD673f7e1daD254347AEab6be0DEFe8b9C6b3A39",
"amount": "40000",
"scheme": "exact",
"network": "eip155:8453",
"maxTimeoutSeconds": 120
}
],
"resource": {
"url": "https://keywords.duoleads.com/v1/clickstream-search-volume",
"tags": [
"search-volume",
"seo",
"keyword-research",
"clickstream",
"keyword-data"
],
"iconUrl": "https://keywords.duoleads.com/logo.png",
"mimeType": "application/json",
"description": "Search volume estimated from clickstream data (real user search behaviour, not Google Ads ranges) for up to 100 keywords: average monthly searches and optional 12-month history, in 94 countries, from clickstream panel data, $0.04 a call. Use when Google Ads volumes look bucketed or you want a second estimate. Keywords under 3 characters are listed in missing. Bad input is a free 400; a data source failure is not charged.",
"serviceName": "Clickstream Search Volume"
},
"extensions": {
"bazaar": {
"info": {
"input": {
"body": {
"keywords": [
"coffee maker",
"espresso machine"
]
},
"type": "http",
"method": "POST",
"bodyType": "json"
},
"output": {
"type": "json",
"example": {
"total": 2,
"units": "volume = estimated average monthly searches (clickstream estimate, not Google Ads); monthly = searches per month, oldest first.",
"market": {
"country": "US",
"locationCode": 2840,
"locationName": "United States"
},
"source": "clickstream panel data (estimates)",
"results": [
{
"volume": 374285,
"keyword": "coffee maker"
},
{
"volume": 201460,
"keyword": "espresso machine"
}
],
"see_also": {
"params": [
"keywords"
],
"reason": "Want Google Ads volume, CPC and difficulty for the same keywords? Call keyword-overview.",
"endpoint": "https://keywords.duoleads.com/v1/keyword-overview"
},
"request_id": "01KEXAMPLE0000000000000000"
}
}
},
"schema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"input"
],
"properties": {
"input": {
"type": "object",
"required": [
"type",
"method",
"bodyType",
"body"
],
"properties": {
"body": {
"type": "object",
"required": [
"keywords"
],
"properties": {
"country": {
"type": "string",
"maxLength": 2,
"minLength": 2,
"description": "ISO 3166-1 alpha-2 code, used when locationCode is absent (uk = gb)."
},
"keywords": {
"type": "array",
"items": {
"type": "string",
"maxLength": 80
},
"maxItems": 100,
"minItems": 1,
"description": "Keywords (1-100; each 3-80 characters; one that cannot be looked up is listed in missing)."
},
"locationCode": {
"type": "integer",
"description": "Location code of a country (2840 = United States, 2826 = United Kingdom, 2276 = Germany, ...; the /docs table). Default 2840."
},
"includeMonthly": {
"type": "boolean",
"description": "Add each keyword's monthly search volumes."
}
}
},
"type": {
"type": "string",
"const": "http"
},
"method": {
"enum": [
"POST"
],
"type": "string"
},
"bodyType": {
"enum": [
"json",
"form-data",
"text"
],
"type": "string"
}
},
"additionalProperties": false
},
"output": {
"type": "object",
"required": [
"type"
],
"properties": {
"type": {
"type": "string"
},
"example": {
"type": "object"
}
}
}
}
}
}
},
"x402Version": 2
}Captured payload 41 of 44
{
"error": "Payment required",
"accepts": [
{
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"extra": {
"name": "USD Coin",
"version": "2"
},
"payTo": "0xCD673f7e1daD254347AEab6be0DEFe8b9C6b3A39",
"amount": "48000",
"scheme": "exact",
"network": "eip155:8453",
"maxTimeoutSeconds": 120
}
],
"resource": {
"url": "https://keywords.duoleads.com/v1/brand-mentions",
"tags": [
"brand-monitoring",
"seo",
"mentions",
"sentiment-analysis",
"content-analysis"
],
"iconUrl": "https://keywords.duoleads.com/logo.png",
"mimeType": "application/json",
"description": "Web pages that mention a brand or keyword: up to 100 with URL, domain, date, sentiment (positive / negative / neutral with scores), the page's rating, page type, country, language and domain / page rank (no snippets or authors), from a web content index, $0.048 a call. Use when monitoring brand mentions or finding PR and link prospects. No mention is an empty answer, still charged. Bad input is a free 400; a data source failure is not charged.",
"serviceName": "Brand Mentions on the Web"
},
"extensions": {
"bazaar": {
"info": {
"input": {
"body": {
"limit": 2,
"keyword": "example brand"
},
"type": "http",
"method": "POST",
"bodyType": "json"
},
"output": {
"type": "json",
"example": {
"total": 2,
"units": "date = ISO 8601 UTC (publication, else when read); sentimentScores = share 0-1; rating = the page's own rating scaled to 0-5; domainRank / urlRank = 0-1000 (provider scale); spamScore = 0-100.",
"source": "web content index",
"keyword": "example brand",
"results": [
{
"url": "https://news.example.com/2026/10/example-brand-launch",
"date": "2026-10-30T16:45:54Z",
"domain": "news.example.com",
"country": "US",
"urlRank": 54,
"language": "en",
"pageTypes": [
"news"
],
"sentiment": "positive",
"spamScore": 0,
"domainRank": 482,
"sentimentScores": {
"neutral": 0.21,
"negative": 0.08,
"positive": 0.71
}
},
{
"url": "https://shop.example.org/reviews/example-brand",
"date": "2026-10-23T19:01:08Z",
"domain": "shop.example.org",
"rating": 4,
"country": "GB",
"urlRank": 37,
"language": "en",
"pageTypes": [
"ecommerce"
],
"sentiment": "negative",
"spamScore": 0,
"domainRank": 489,
"sentimentScores": {
"neutral": 0.02,
"negative": 0.97,
"positive": 0.01
}
}
],
"see_also": {
"params": [
"keyword"
],
"reason": "Want which AI answers mention it? Call llm-mentions.",
"endpoint": "https://keywords.duoleads.com/v1/llm-mentions"
},
"available": 6454097,
"request_id": "01KEXAMPLE0000000000000000"
}
}
},
"schema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"input"
],
"properties": {
"input": {
"type": "object",
"required": [
"type",
"method",
"bodyType",
"body"
],
"properties": {
"body": {
"type": "object",
"required": [
"keyword"
],
"properties": {
"limit": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"description": "Rows to return, 1-100. Default 20."
},
"keyword": {
"type": "string",
"maxLength": 80,
"minLength": 1,
"description": "The brand or keyword (at most 80 characters, up to 10 words)."
}
}
},
"type": {
"type": "string",
"const": "http"
},
"method": {
"enum": [
"POST"
],
"type": "string"
},
"bodyType": {
"enum": [
"json",
"form-data",
"text"
],
"type": "string"
}
},
"additionalProperties": false
},
"output": {
"type": "object",
"required": [
"type"
],
"properties": {
"type": {
"type": "string"
},
"example": {
"type": "object"
}
}
}
}
}
}
},
"x402Version": 2
}Captured payload 42 of 44
{
"error": "Payment required",
"accepts": [
{
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"extra": {
"name": "USD Coin",
"version": "2"
},
"payTo": "0xCD673f7e1daD254347AEab6be0DEFe8b9C6b3A39",
"amount": "24000",
"scheme": "exact",
"network": "eip155:8453",
"maxTimeoutSeconds": 120
}
],
"resource": {
"url": "https://keywords.duoleads.com/v1/tech-stack",
"tags": [
"tech-stack",
"seo",
"website-technology",
"competitor-analysis",
"lead-generation"
],
"iconUrl": "https://keywords.duoleads.com/logo.png",
"mimeType": "application/json",
"description": "The technology stack of a website: CMS, frameworks, JavaScript libraries, analytics and tag managers, CDN, web server, e-commerce and marketing tools, grouped by category, plus the domain's rank, country and language, from a web technology index, $0.024 a call. Use when profiling a prospect or competitor's site. Send a registrable domain (www. is dropped). Not in the index is found false, still charged. Bad input is a free 400; a data source failure is not charged.",
"serviceName": "Website Technology Stack"
},
"extensions": {
"bazaar": {
"info": {
"input": {
"body": {
"target": "example.com"
},
"type": "http",
"method": "POST",
"bodyType": "json"
},
"output": {
"type": "json",
"example": {
"count": 6,
"found": true,
"units": "technologies = names by group and category; count = distinct technologies; domainRank = 0-1000 (provider scale).",
"source": "web technology index",
"target": "example.com",
"country": "US",
"language": "en",
"see_also": {
"params": [
"target"
],
"reason": "Want the domain's registration dates and registrar? Call whois.",
"endpoint": "https://keywords.duoleads.com/v1/whois"
},
"domainRank": 361,
"request_id": "01KEXAMPLE0000000000000000",
"technologies": {
"content": {
"cms": [
"WordPress"
]
},
"servers": {
"cdn": [
"Cloudflare"
],
"web_servers": [
"Nginx"
]
},
"analytics": {
"tag_managers": [
"Google Tag Manager"
]
},
"web_development": {
"javascript_libraries": [
"jQuery"
],
"programming_languages": [
"PHP"
]
}
}
}
}
},
"schema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"input"
],
"properties": {
"input": {
"type": "object",
"required": [
"type",
"method",
"bodyType",
"body"
],
"properties": {
"body": {
"type": "object",
"required": [
"target"
],
"properties": {
"target": {
"type": "string",
"maxLength": 253,
"minLength": 1,
"description": "A registrable domain like example.com (no scheme or path; www. is dropped; no other subdomain)."
}
}
},
"type": {
"type": "string",
"const": "http"
},
"method": {
"enum": [
"POST"
],
"type": "string"
},
"bodyType": {
"enum": [
"json",
"form-data",
"text"
],
"type": "string"
}
},
"additionalProperties": false
},
"output": {
"type": "object",
"required": [
"type"
],
"properties": {
"type": {
"type": "string"
},
"example": {
"type": "object"
}
}
}
}
}
}
},
"x402Version": 2
}Captured payload 43 of 44
{
"error": "Payment required",
"accepts": [
{
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"extra": {
"name": "USD Coin",
"version": "2"
},
"payTo": "0xCD673f7e1daD254347AEab6be0DEFe8b9C6b3A39",
"amount": "210000",
"scheme": "exact",
"network": "eip155:8453",
"maxTimeoutSeconds": 120
}
],
"resource": {
"url": "https://keywords.duoleads.com/v1/whois",
"tags": [
"whois",
"seo",
"domain-age",
"domain-research",
"expired-domains"
],
"iconUrl": "https://keywords.duoleads.com/logo.png",
"mimeType": "application/json",
"description": "WHOIS overview of a domain: registered or not, registrar, creation, update and expiry dates, EPP status codes and TLD, plus its Google ranking keywords, estimated traffic and backlink counts (no registrant personal data), from WHOIS records, $0.21 a call. Use when checking a domain's age, owner registrar or expiry. Send a registrable domain (www. is dropped). Not in the index is found false, still charged. Bad input is a free 400; a data source failure is not charged.",
"serviceName": "WHOIS Domain Overview"
},
"extensions": {
"bazaar": {
"info": {
"input": {
"body": {
"target": "example.com"
},
"type": "http",
"method": "POST",
"bodyType": "json"
},
"output": {
"type": "json",
"example": {
"tld": "com",
"found": true,
"units": "dates = ISO 8601 UTC; status = EPP status codes; organic.etv = estimated monthly visits from Google; backlinks = link counts in a web link index.",
"source": "WHOIS records",
"status": [
"client_transfer_prohibited"
],
"target": "example.com",
"changed": "2022-12-10T02:12:58Z",
"created": "1999-02-25T05:00:00Z",
"expires": "2032-02-25T05:00:00Z",
"organic": {
"etv": 253840.05,
"keywords": 15053
},
"updated": "2025-04-21T19:40:37Z",
"see_also": {
"params": [
"target"
],
"reason": "Want the domain's full Google visibility by position? Call domain-overview.",
"endpoint": "https://keywords.duoleads.com/v1/domain-overview"
},
"backlinks": {
"backlinks": 3482840,
"referringDomains": 52113,
"referringMainDomains": 45950
},
"firstSeen": "2020-10-07T00:00:00Z",
"registrar": "Example Registrar, Inc.",
"registered": true,
"request_id": "01KEXAMPLE0000000000000000"
}
}
},
"schema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"input"
],
"properties": {
"input": {
"type": "object",
"required": [
"type",
"method",
"bodyType",
"body"
],
"properties": {
"body": {
"type": "object",
"required": [
"target"
],
"properties": {
"target": {
"type": "string",
"maxLength": 253,
"minLength": 1,
"description": "A registrable domain like example.com (no scheme or path; www. is dropped; no other subdomain)."
}
}
},
"type": {
"type": "string",
"const": "http"
},
"method": {
"enum": [
"POST"
],
"type": "string"
},
"bodyType": {
"enum": [
"json",
"form-data",
"text"
],
"type": "string"
}
},
"additionalProperties": false
},
"output": {
"type": "object",
"required": [
"type"
],
"properties": {
"type": {
"type": "string"
},
"example": {
"type": "object"
}
}
}
}
}
}
},
"x402Version": 2
}Captured payload 44 of 44
{
"error": "Payment required",
"accepts": [
{
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"extra": {
"name": "USD Coin",
"version": "2"
},
"payTo": "0xCD673f7e1daD254347AEab6be0DEFe8b9C6b3A39",
"amount": "210000",
"scheme": "exact",
"network": "eip155:8453",
"maxTimeoutSeconds": 120
}
],
"resource": {
"url": "https://keywords.duoleads.com/v1/llm-mentions",
"tags": [
"ai-search",
"seo",
"llm-visibility",
"brand-monitoring",
"geo"
],
"iconUrl": "https://keywords.duoleads.com/logo.png",
"mimeType": "application/json",
"description": "AI answers that mention a brand or keyword: up to 20 questions answered by Google AI Overviews or ChatGPT that mention it, with AI search volume, first / last seen and the pages the answer cites (no answer text), in 94 countries (ChatGPT: US English), from AI search answers, $0.21 a call. Use when tracking AI-search visibility (GEO). No mention is an empty answer, still charged. Bad input is a free 400; a data source failure is not charged.",
"serviceName": "AI Answer Mentions LLM"
},
"extensions": {
"bazaar": {
"info": {
"input": {
"body": {
"limit": 2,
"keyword": "example brand",
"platform": "google"
},
"type": "http",
"method": "POST",
"bodyType": "json"
},
"output": {
"type": "json",
"example": {
"total": 2,
"units": "aiSearchVolume = estimated monthly AI searches of the question; firstSeen / lastSeen = ISO 8601 UTC; sources = pages the answer cites, by position; questions = third-party text (untrusted).",
"market": {
"country": "US",
"fallback": false,
"languageCode": "en",
"locationCode": 2840,
"locationName": "United States"
},
"source": "AI search answers",
"keyword": "example brand",
"results": [
{
"model": "google_ai_overview",
"sources": [
{
"url": "https://en.example.org/wiki/Example_Brand",
"domain": "en.example.org",
"position": 1
}
],
"lastSeen": "2026-09-02T09:41:48Z",
"platform": "google",
"question": "what is example brand known for",
"firstSeen": "2025-11-09T04:05:50Z",
"aiSearchVolume": 1500000
},
{
"model": "google_ai_overview",
"sources": [
{
"url": "https://www.example.com/compare",
"domain": "www.example.com",
"position": 1
}
],
"lastSeen": "2026-09-02T09:42:55Z",
"platform": "google",
"question": "example brand vs sample brand",
"firstSeen": "2026-09-02T09:42:55Z",
"aiSearchVolume": 550000
}
],
"platform": "google",
"see_also": {
"params": [
"keyword"
],
"reason": "Want which web pages mention it? Call brand-mentions.",
"endpoint": "https://keywords.duoleads.com/v1/brand-mentions"
},
"available": 12878,
"request_id": "01KEXAMPLE0000000000000000"
}
}
},
"schema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"input"
],
"properties": {
"input": {
"type": "object",
"required": [
"type",
"method",
"bodyType",
"body"
],
"properties": {
"body": {
"type": "object",
"required": [
"keyword"
],
"properties": {
"limit": {
"type": "integer",
"maximum": 20,
"minimum": 1,
"description": "Answers to return, 1-20. Default 10."
},
"country": {
"type": "string",
"maxLength": 64,
"description": "Optional ISO 3166-1 alpha-2 code or country name, used when locationCode is absent (uk = gb)."
},
"keyword": {
"type": "string",
"maxLength": 80,
"minLength": 1,
"description": "The brand or keyword (at most 80 characters, up to 10 words)."
},
"platform": {
"enum": [
"google",
"chat_gpt"
],
"type": "string",
"description": "google (AI Overviews, default) or chat_gpt (United States, en only)."
},
"languageCode": {
"type": "string",
"maxLength": 16,
"description": "Language code (2-letter). Defaults to en. An unsupported location falls back to 2840 (United States) with en (or the requested language if the United States offers it); a supported location with a language it does not offer uses that location's default language (en if offered). Either way market.fallback is true and market.warnings says what was used."
},
"locationCode": {
"type": "integer",
"description": "Google Ads location code (geo target ID). Defaults to 2840 (United States); an unsupported code falls back to 2840 (United States, market.fallback)."
}
}
},
"type": {
"type": "string",
"const": "http"
},
"method": {
"enum": [
"POST"
],
"type": "string"
},
"bodyType": {
"enum": [
"json",
"form-data",
"text"
],
"type": "string"
}
},
"additionalProperties": false
},
"output": {
"type": "object",
"required": [
"type"
],
"properties": {
"type": {
"type": "string"
},
"example": {
"type": "object"
}
}
}
}
}
}
},
"x402Version": 2
}Can I trust it score from our own monitoring
score from our own monitoring
#38 of 492 in Data. Bands: strong 93+, solid 75+, mixed 55+, weak below 55.
- Reliability
- 100% uptime since 11-11
- Compliance
- A 14/14 checks pass
- Price
- $0.012 to $0.25 p74 in Data
- Risk
- clean no risk flag
- Traction
- ---
14/14 compliance checks
- 402 payload captured
- accepts[] array present
- payTo address recoverable
- payTo at accepts[0].payTo (conformant shape)
- payTo is a valid on-chain address
- atomic price declared
- atomic price in a sane range
- asset (token) address declared
- network resolves to CAIP-2
- payment scheme declared
- served over HTTPS
- declares the current x402 version (2)
- EIP-712 domain parameters present on every EVM entry
- x402 v2 envelope delivered in the payment-required header
402 terms unchanged since 2026-11-11. Last up 2026-11-11.
── Site signals
- homepage reachable
- openapi doc
- pricing page
- llms.txt
- robots.txt
- terms page
How the score works
What the score read on this service: status online, 100% uptime, latest daily rollup (no 30d window yet), 58ms response p95, x402 compliance 14 of 14, $0.012 price against the category. Each of those is measured, and each is published in full below.
The score comes from our own monitoring, never from reviews, operator claims, or a language model: reliability, x402 compliance, price against the category, a deterministic risk flag, and a small on-chain traction term, weighted by ranking generation 3. It is not placement anyone can buy: the paid verify tier is reported beside it and is not one of its inputs. Every component below stays published and read-only.
Bands on the 0 to 100 measured score: strong at 93 and above, solid from 75, mixed from 55, weak below 55. Price and speed are scored against the whole category field, every listing in it that carries no danger flag, the scored service included, so the score places a service in its own field.
It is a score inside Data, and only there: price and speed are scored against the whole category field, every listing in it that carries no danger flag, the scored service included, which here means 492 listings, this one among them: the same 492 the position above is counted against. When the two differ, the field is the wider one, because a listing we have measured too little of to rank still sits in the field the price and the speed are normalized over. The same service in a different field would read differently. The same engine answers GET /api/v1/best, and asked for a different pool (the whole directory, or another filter) it returns a different number for this service under this same ranking generation. Neither is more correct: they answer different questions, and the methodology states which is which.
All measured facts
What it does
44 SEO and keyword data endpoints for agents and developers, paid per call over x402 (USDC on Base), $0.012 to $0.25. Google search volume, CPC, keyword difficulty, keyword ideas and Google Trends; domain overview, ranked keywords, competitors and keyword gap; backlinks, referring domains and anchors; Google, Bing, YouTube, Maps and Amazon search results; on-page audit, PageSpeed, tech stack and brand mentions. Also as remote MCP and A2A. No account, no API key.
SEO and Keyword Data API is a listed x402 Data API. Captured payment terms name Base. Monitoring and settlement figures below describe the observations available to this directory; an unpaid HTTP 402 check does not prove that a paid call will deliver.
Assessment computed at . Latest service check observed at . Service data JSON · Measurement methodology.
Page rendered at . This response time is separate from the observation and computation times attached to each measurement.
Latest endpoint observation: . Latest price capture: . Prices are recorded quotes, not a promise of availability. Token assets and payment terms are listed separately. Endpoint data JSON · Price history JSON · Measurement methodology.
Assessment computed at . Uptime uses the stated daily-rollup window; response times are in milliseconds, compliance is passed/evaluated checks, and traction is a measured settlement floor. The comparison score is out of 100 within this category. Assessment JSON · Measurement methodology.
Observed daily coverage: 2026-10-13 to 2026-11-11 UTC. Daily monitoring and settlement rollups do not expose their computation time; a bucket date is not an update timestamp. Uptime and response JSON · Volume JSON · Buyers JSON · Measurement methodology.
Ranked from the measured category pool, refreshed at most once a minute. The comparison has no persisted computation timestamp; the assessment time above belongs to this service only. Ranking API documentation · Ranking methodology.
x402 List home · Services · Data
- uptime · latest daily rollup
- -
- uptime 7d
- -
- uptime 30d
- -
- uptime 90d
- -
- response p95
- 58ms
- avg response
- 58ms
- total checks
- 1
Measured on the unpaid 402 handshake, not the paid call. A service can 402 correctly and still fail after payment.
- price (min)
- $0.012
- price (max)
- $0.25
- category percentile (min)
- p74 in Data
- category percentile (max)
- p81 in Data
- endpoints / prices
- 44 / 11
- model
- tiered
- stability
- 100%
No deterministic risk flag. Risk fires only on an exact blocklist match, or a reserved-brand name with a mismatched verified payTo. Never from low uptime, a high price, or a model guess.
- domain age
- 2204d
- registrar
- Key-Systems GmbH
- hosting
- custom
- domain created
- 2020-10-29
Identity facts, not a risk score.
On-chain traction has not been assessed for this service yet.
- member since
- 2026-11-11
Recent checks
| Checked at (UTC) | Status | HTTP | Response | Endpoints |
|---|---|---|---|---|
| Online | 402 | 42ms | 44 | |
| Online | 402 | 44ms | 44 | |
| Online | 402 | 69ms | 44 | |
| Online | 402 | 55ms | 44 | |
| Online | 402 | 46ms | 44 | |
| Online | 402 | 58ms | 44 |
Changes0 in 30d
No changes recorded in the last 30 days.
Over time
On-chain traction has not been assessed for this service yet.
- Uptime
- no completed-day data
On-chain traction has not been assessed for this service yet.
More charts
10-13 to 11-11* UTC
Each series spans only the dates it has data for. Every series is also served as JSON at /api, /scores, /volume and /buyers.
Values
* today so far, partial (UTC).
The uptime summary counts completed UTC days only. The strip, readouts and table retain today's partial reading.
Assessment history last recorded at . Each UTC day uses its last recorded run; missing readings stay unmeasured. Assessment history JSON · Measurement methodology.
| Day | Uptime | Response | Compliance | Price percentile | Site signals |
|---|---|---|---|---|---|
| 2026-11-11* | 100% | 57.00ms | 14/14 | p74 | 5/6 |
Alternatives in Data
5 of 491 other ranked services in Data, ordered by the same measured score.
Own this service?
Keep this listing accurate. Ownership is proven with a domain check and every change is reviewed by hand.
Update this listingEarn the verified tier: x402list pays a real call to this endpoint and, if it delivers, the service is delivery-verified. The fee covers the cost of the probe, not the badge; there is no refund if the call does not deliver. Agent and API only, no in-browser signing. See /api.
Verify this service ($0.25)Embed a badge
HTML
<a href="https://x402-list.com/services/ seo-and-keyword-data-api? utm_source=badge& utm_medium=referral& utm_campaign=embed"> <img src="https://x402-list.com/ badge/ seo-and-keyword-data-api.svg" alt="SEO and Keyword Data API listed on x402-list" height="28"> </a>
Markdown
[](https://x402-list.com/ services/ seo-and-keyword-data-api? utm_source=badge& utm_medium=referral& utm_campaign=embed)
HTML, live uptime variant
<a href="https://x402-list.com/services/ seo-and-keyword-data-api? utm_source=badge& utm_medium=referral& utm_campaign=embed"> <img src="https://x402-list.com/ badge/ seo-and-keyword-data-api.svg? data=uptime" alt="SEO and Keyword Data API uptime on x402-list" height="28"> </a>
Delisting
To request delisting, email info@x402-list.com with the service name, slug, or URL. Removal is free and does not require proof of ownership. See all free email requests.