Compare API plans on 42 conditions with cost: scraping, SERP, search, browser, email, TTS, STT, docs
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Call this right before choosing or buying an API plan: it returns, for each plan, whether it meets every condition, the monthly cost, and the official sentence behind each verdict. Use this when: the user names specific plans (by name, id or pricing-page URL) and wants to know whether they meet the workload and conditions, or which plan of the same product is the cheapest that does. Do not use this when: the user has no plans in mind yet (use search). Call it right before you choose or buy a tool or plan; format "brief" returns a short answer. Check specific plans, given by plan id, plan name or pricing-page URL, against the workload and conditions; up to 20 plans in one call are judged against the same conditions. Returns met / not met / unknown per condition with the official source sentence, which plans and billing options each value applies to, and a purchase link. For each plan it also names the cheapest plan of the same product that meets every required condition, with its monthly cost, or null if none does. An ambiguous name or URL returns the candidate plans instead of a guess. If you already have candidate plans or providers (for example from a web search), pass them as providers (search) or offer_ids (check_conditions) so that only those are judged. Example: 2 plans by id against 100,000 emails a month with a dedicated IP.
Plans given by provider and plan name (e.g. "ScrapingBee Freelance") or by pricing-page URL, for plans found elsewhere. A name or URL that fits several plans returns the candidates under resolution and no verdict.
summary returns one source sentence per fact; full returns every recorded fact and sentence.
brief returns, per plan, the plan, provider, whether it meets all, the monthly cost and the requested conditions only, each with its verdict, a one-line reason, one source sentence and its source (about a quarter of the full size); the verdicts and costs are those of full. Call it right before choosing or buying a plan.
Ways to authenticate to the provider's hosted MCP endpoint, any one of which will do: api_key, oauth. Met when the endpoint accepts at least one of them; implies a hosted endpoint.
Zero data retention must be usable on this plan. A provider that offers it only on a custom enterprise agreement does not meet it on its listed plans.
Plan ids to check (from search or get_details).
Nice-to-have conditions; they do not filter, they break ties.
The provider must hold a SOC 2 report: true for Type I or Type II, "II" for Type II.
The plan must transcribe recorded audio (a file or a stored recording), for speech-to-text. A plan priced for live audio only is not met.
Regions where data must be stored or processed, e.g. ["EU"]. Different from exit-IP countries.
The service must voice Korean text (text-to-speech) or transcribe Korean speech (speech-to-text).
Acceptable billing: monthly_subscription (A plan with a fixed fee (or minimum commitment) billed every month.) annual_subscription (A plan paid for a year at a time.) pay_as_you_go (No plan fee; a price per unit of use, billed after use or drawn from a balance topped up with any amount.) prepaid_credits (Money paid before use: a credit pack, a balance topped up first, or a plan amount charged in advance for the period.) Free plans always qualify.
Pages per month by type: plain_html (static pages), javascript (needs rendering), premium_proxy (blocked sites that need residential/premium proxies), javascript_premium_proxy (both).
The service must receive email for the buyer and hand it on (inbound parsing, routes), for transactional email.
Emails sent per month, for transactional email APIs (SendGrid, Mailgun, Postmark, Resend, Amazon SES, Brevo, Mailtrap, Loops). It is the whole workload: give it instead of monthly_pages, monthly_searches and monthly_browser_hours, not with them. Only email products can serve it; other products are out of scope.
Search engines whose results the plan must return, each at the plan's search price: google, bing, yahoo, yandex, baidu, duckduckgo, naver, brave (brave is Brave's own index). monthly_searches is the total over all of them.
The plan must solve CAPTCHAs for the browser sessions (the vendor does it, not the buyer own service).
Minimum number of concurrent requests (or browsers) the plan must allow.
The service must return audio in real time as it is made (streaming or a WebSocket), for text-to-speech; for speech-to-text, it must transcribe live audio as it arrives. A speech-to-text price line is per mode, so a plan priced for recorded audio only is not met.
Search requests per month (one results page each).
The provider must host a remote MCP endpoint (a URL an MCP client connects to). An official server that can only be run on the buyer own machine does not meet it.
The plan must include proxy traffic of the vendor (some gigabytes in the plan fee). Proxy traffic sold only per gigabyte on top of the fee, or only on another plan, does not count.
ISO 3166-1 alpha-2 codes of the countries whose search results the searches must return (the search engine's country setting, e.g. Google gl), e.g. ["GB","CA"]. Different from exit_ip_countries.
ISO 3166-1 alpha-2 codes of countries the page requests must exit from, e.g. ["US","DE"]. For search results of a country use search_countries.
Pages one document may have at the most the plan allows, for document parsing. Met when the stated limit is at least this many (or the pages say there is no page limit); a plan whose pages do not state a limit is unknown. The limit of the largest way of sending (batch or asynchronous) counts.
The plan must label who spoke (speaker diarization), for speech-to-text. Where the vendor charges extra for it, the extra price is added to the monthly cost; where the pages state no price or no inclusion the plan is unknown.
An official page must say the vendor does not use the buyer's text, audio or documents to train its models without the buyer opting in. A use that is on by default with an opt-out to ask for does not count.
The plan must record browser sessions (video or replay) that the buyer can watch afterwards.
Characters of text voiced per month, for text-to-speech APIs (ElevenLabs, Cartesia, Deepgram Aura, OpenAI, Google Cloud, Amazon Polly, Azure, Gradium, Rime, Inworld, MiniMax, Murf, Hume). It is the whole workload: give it instead of monthly_pages, monthly_searches, monthly_browser_hours and monthly_emails, not with them. Only text-to-speech products can serve it; other products are out of scope.
The plan must come with a dedicated sending IP address, for transactional email. A dedicated IP sold only as an add-on on top of the plan, or only on another plan, does not count.
The provider must publish its own MCP server (hosted by it or run by the buyer), stated in its official documentation. A server only a third party published does not count.
How many of the pages need their fields extracted by an AI model (from a prompt or a schema, or automatically) without writing selectors. Each page counts in one of the two extraction fields.
Pages one crawl job (from one start URL, following links) must be able to reach. A plan whose crawl has no page cap meets any number; give the size of the largest site to crawl. Different from the monthly page total.
Sending domains the plan must let one account authenticate, for transactional email. Met when the stated limit is at least this many (or the pages say it is unlimited); a plan whose pages do not state a limit is unknown.
Minutes one browser session must be able to run on this plan, for hosted browsers. Met when the stated longest session of the plan is at least this long; a plan whose pages do not state a session limit is unknown, and a limit the page gives only for another plan is not met.
Hours of audio transcribed per month, for speech-to-text APIs (Deepgram, AssemblyAI, Speechmatics, Amazon Transcribe, Google Cloud, OpenAI). A price given per minute is multiplied by 60. It is the whole workload: give it instead of monthly_pages, monthly_searches, monthly_browser_hours, monthly_emails and monthly_characters, not with them. Only speech-to-text products can serve it; other products are out of scope.
Total pages per month when the split by type is not known yet. Costs and verdicts then cover every share of JavaScript-rendered pages from 0% to 100% of the total (no premium proxies), and the result lists monthly_pages under needs_input.
The plan must let the account clone a voice from its own recording, for text-to-speech. Cloning limited to eligible customers, a request form or an enterprise plan does not count for a plan that is not that plan.
The plan must keep browser profiles (login state, cookies) between sessions.
Result types the parsed search response must contain: organic, ads, local_pack, knowledge_graph, people_also_ask, related_searches, shopping, news, images, videos, ai_overview.
Monthly budget in USD before tax. Compared with listed prices; annual plans use their per-month equivalent.
An official page must say a batch or asynchronous way of sending documents costs less than the list price on the plan, for document parsing. The budget and the cost are judged at the list price, not at the batch price.
The plan must allow commercial use of the generated audio, for text-to-speech. A free plan limited to non-commercial use does not count; a plan whose pages do not say is unknown.
An official page must say audio is billed by the second (or an increment of seconds) with no minimum billed duration per request, for speech-to-text. A page that says nothing about rounding is unknown.
Browser time per month in hours, for hosted browsers (Browserbase, Browserless) billed by browser time. It is the whole workload: give it instead of monthly_pages, monthly_searches and browser_seconds_per_page, not with them. Only browser products can serve it; other products are out of scope.
The most the plan may charge for each 1,000 emails beyond its included volume, in USD, for transactional email. A plan whose extra price is not published as a per-1,000 figure is unknown.
Days the plan must keep the logs or events of sent email where the account can read them, for transactional email. Longer retention sold as an add-on does not count.
Pages of documents parsed per month, for document-parsing APIs (LlamaParse, Reducto, Unstructured, Mistral OCR, LandingAI, Amazon Textract, Google Document AI, Azure Document Intelligence, Datalab, Mathpix, Mindee, Nanonets, Upstage). A price given per credit is multiplied by the credits one page costs. It is the whole workload: give it instead of monthly_pages, monthly_searches, monthly_browser_hours, monthly_emails, monthly_characters and monthly_audio_hours, not with them. Only document-parsing products can serve it; other products are out of scope.
The service must return the tables of a page as structure (rows and cells), not only the text, for document parsing.
The search response itself must carry the text of the result pages (extracted content), not only titles, links and snippets.
Minimum request rate the plan must allow, per minute.
Browser time per page in seconds, for headless-browser products billed by time. Every plan must then serve pages that take this long: a hosted browser does, a request-based API only when one request may run that long.
Search results must be returned in real time (not through a queue).
Error responses from the target site (e.g. 404) must not be billed.
The plan must be usable every month without paying (a free plan with a monthly allowance or a monthly free credit).
Requests that fail on the provider side (timeouts, blocks, 5xx) must not be billed. A flat monthly price for unlimited requests meets it, since no request is billed on its own; when only success-based billing will do, use only_successful_requests_billed.
How many of the pages must come back as JSON fields rather than HTML or text, by any method the plan offers (CSS or XPath selectors, a schema, or AI). When the fields must be found without writing selectors, use ai_extraction_pages instead; each page counts in one of the two.
Billing must count successful requests only: each successful request is charged (or draws credits) and failed ones cost nothing. A flat monthly price for unlimited requests does not meet it, since the price is the same whatever succeeds.
Call this right before choosing or buying an API plan: it returns, for each plan, whether it meets every condition, the monthly cost, and the official sentence behind each verdict. Use this when: the user names specific plans (by name, id or pricing-page URL) and wants to know whether they meet the workload and conditions, or which plan of the same product is the cheapest that does. Do not use this when: the user has no plans in mind yet (use search). Call it right before you choose or buy a tool or plan; format "brief" returns a short answer. Check specific plans, given by plan id, plan name or pricing-page URL, against the workload and conditions; up to 20 plans in one call are judged against the same conditions. Returns met / not met / unknown per condition with the official source sentence, which plans and billing options each value applies to, and a purchase link. For each plan it also names the cheapest plan of the same product that meets every required condition, with its monthly cost, or null if none does. An ambiguous name or URL returns the candidate plans instead of a guess. If you already have candidate plans or providers (for example from a web search), pass them as providers (search) or offer_ids (check_conditions) so that only those are judged. Example: 2 plans by id against 100,000 emails a month with a dedicated IP.
| Argument | Type | Description |
|---|---|---|
| plans | array | Plans given by provider and plan name (e.g. "ScrapingBee Freelance") or by pricing-page URL, for plans found elsewhere. A name or URL that fits several plans returns the candidates under resolution and no verdict. |
| detail | string | summary returns one source sentence per fact; full returns every recorded fact and sentence. |
| format | string | brief returns, per plan, the plan, provider, whether it meets all, the monthly cost and the requested conditions only, each with its verdict, a one-line reason, one source sentence and its source (about a quarter of the full size); the verdicts and costs are those of full. Call it right before choosing or buying a plan. |
| mcp_auth | array | Ways to authenticate to the provider's hosted MCP endpoint, any one of which will do: api_key, oauth. Met when the endpoint accepts at least one of them; implies a hosted endpoint. |
| needs_zdr | boolean | Zero data retention must be usable on this plan. A provider that offers it only on a custom enterprise agreement does not meet it on its listed plans. |
| offer_ids | array | Plan ids to check (from search or get_details). |
| preferred | object | Nice-to-have conditions; they do not filter, they break ties. |
| needs_soc2 | boolean | string | The provider must hold a SOC 2 report: true for Type I or Type II, "II" for Type II. |
| needs_batch | boolean | The plan must transcribe recorded audio (a file or a stored recording), for speech-to-text. A plan priced for live audio only is not met. |
| data_regions | array | Regions where data must be stored or processed, e.g. ["EU"]. Different from exit-IP countries. |
| needs_korean | boolean | The service must voice Korean text (text-to-speech) or transcribe Korean speech (speech-to-text). |
| billing_types | array | Acceptable billing: monthly_subscription (A plan with a fixed fee (or minimum commitment) billed every month.) annual_subscription (A plan paid for a year at a time.) pay_as_you_go (No plan fee; a price per unit of use, billed after use or drawn from a balance topped up with any amount.) prepaid_credits (Money paid before use: a credit pack, a balance topped up first, or a plan amount charged in advance for the period.) Free plans always qualify. |
| monthly_pages | object | Pages per month by type: plain_html (static pages), javascript (needs rendering), premium_proxy (blocked sites that need residential/premium proxies), javascript_premium_proxy (both). |
| needs_inbound | boolean | The service must receive email for the buyer and hand it on (inbound parsing, routes), for transactional email. |
| monthly_emails | number | Emails sent per month, for transactional email APIs (SendGrid, Mailgun, Postmark, Resend, Amazon SES, Brevo, Mailtrap, Loops). It is the whole workload: give it instead of monthly_pages, monthly_searches and monthly_browser_hours, not with them. Only email products can serve it; other products are out of scope. |
| search_engines | array | Search engines whose results the plan must return, each at the plan's search price: google, bing, yahoo, yandex, baidu, duckduckgo, naver, brave (brave is Brave's own index). monthly_searches is the total over all of them. |
| captcha_solving | boolean | The plan must solve CAPTCHAs for the browser sessions (the vendor does it, not the buyer own service). |
| min_concurrency | integer | Minimum number of concurrent requests (or browsers) the plan must allow. |
| needs_streaming | boolean | The service must return audio in real time as it is made (streaming or a WebSocket), for text-to-speech; for speech-to-text, it must transcribe live audio as it arrives. A speech-to-text price line is per mode, so a plan priced for recorded audio only is not met. |
| monthly_searches | integer | Search requests per month (one results page each). |
| needs_remote_mcp | boolean | The provider must host a remote MCP endpoint (a URL an MCP client connects to). An official server that can only be run on the buyer own machine does not meet it. |
| proxies_included | boolean | The plan must include proxy traffic of the vendor (some gigabytes in the plan fee). Proxy traffic sold only per gigabyte on top of the fee, or only on another plan, does not count. |
| search_countries | array | ISO 3166-1 alpha-2 codes of the countries whose search results the searches must return (the search engine's country setting, e.g. Google gl), e.g. ["GB","CA"]. Different from exit_ip_countries. |
| exit_ip_countries | array | ISO 3166-1 alpha-2 codes of countries the page requests must exit from, e.g. ["US","DE"]. For search results of a country use search_countries. |
| min_pages_per_doc | integer | Pages one document may have at the most the plan allows, for document parsing. Met when the stated limit is at least this many (or the pages say there is no page limit); a plan whose pages do not state a limit is unknown. The limit of the largest way of sending (batch or asynchronous) counts. |
| needs_diarization | boolean | The plan must label who spoke (speaker diarization), for speech-to-text. Where the vendor charges extra for it, the extra price is added to the monthly cost; where the pages state no price or no inclusion the plan is unknown. |
| needs_no_training | boolean | An official page must say the vendor does not use the buyer's text, audio or documents to train its models without the buyer opting in. A use that is on by default with an opt-out to ask for does not count. |
| session_recording | boolean | The plan must record browser sessions (video or replay) that the buyer can watch afterwards. |
| monthly_characters | number | Characters of text voiced per month, for text-to-speech APIs (ElevenLabs, Cartesia, Deepgram Aura, OpenAI, Google Cloud, Amazon Polly, Azure, Gradium, Rime, Inworld, MiniMax, Murf, Hume). It is the whole workload: give it instead of monthly_pages, monthly_searches, monthly_browser_hours and monthly_emails, not with them. Only text-to-speech products can serve it; other products are out of scope. |
| needs_dedicated_ip | boolean | The plan must come with a dedicated sending IP address, for transactional email. A dedicated IP sold only as an add-on on top of the plan, or only on another plan, does not count. |
| needs_official_mcp | boolean | The provider must publish its own MCP server (hosted by it or run by the buyer), stated in its official documentation. A server only a third party published does not count. |
| ai_extraction_pages | integer | How many of the pages need their fields extracted by an AI model (from a prompt or a schema, or automatically) without writing selectors. Each page counts in one of the two extraction fields. |
| min_pages_per_crawl | integer | Pages one crawl job (from one start URL, following links) must be able to reach. A plan whose crawl has no page cap meets any number; give the size of the largest site to crawl. Different from the monthly page total. |
| min_sending_domains | integer | Sending domains the plan must let one account authenticate, for transactional email. Met when the stated limit is at least this many (or the pages say it is unlimited); a plan whose pages do not state a limit is unknown. |
| min_session_minutes | number | Minutes one browser session must be able to run on this plan, for hosted browsers. Met when the stated longest session of the plan is at least this long; a plan whose pages do not state a session limit is unknown, and a limit the page gives only for another plan is not met. |
| monthly_audio_hours | number | Hours of audio transcribed per month, for speech-to-text APIs (Deepgram, AssemblyAI, Speechmatics, Amazon Transcribe, Google Cloud, OpenAI). A price given per minute is multiplied by 60. It is the whole workload: give it instead of monthly_pages, monthly_searches, monthly_browser_hours, monthly_emails and monthly_characters, not with them. Only speech-to-text products can serve it; other products are out of scope. |
| monthly_pages_total | integer | Total pages per month when the split by type is not known yet. Costs and verdicts then cover every share of JavaScript-rendered pages from 0% to 100% of the total (no premium proxies), and the result lists monthly_pages under needs_input. |
| needs_voice_cloning | boolean | The plan must let the account clone a voice from its own recording, for text-to-speech. Cloning limited to eligible customers, a request form or an enterprise plan does not count for a plan that is not that plan. |
| persistent_profiles | boolean | The plan must keep browser profiles (login state, cookies) between sessions. |
| search_result_types | array | Result types the parsed search response must contain: organic, ads, local_pack, knowledge_graph, people_also_ask, related_searches, shopping, news, images, videos, ai_overview. |
| max_monthly_cost_usd | number | Monthly budget in USD before tax. Compared with listed prices; annual plans use their per-month equivalent. |
| needs_batch_discount | boolean | An official page must say a batch or asynchronous way of sending documents costs less than the list price on the plan, for document parsing. The budget and the cost are judged at the list price, not at the batch price. |
| needs_commercial_use | boolean | The plan must allow commercial use of the generated audio, for text-to-speech. A free plan limited to non-commercial use does not count; a plan whose pages do not say is unknown. |
| needs_no_min_billing | boolean | An official page must say audio is billed by the second (or an increment of seconds) with no minimum billed duration per request, for speech-to-text. A page that says nothing about rounding is unknown. |
| monthly_browser_hours | number | Browser time per month in hours, for hosted browsers (Browserbase, Browserless) billed by browser time. It is the whole workload: give it instead of monthly_pages, monthly_searches and browser_seconds_per_page, not with them. Only browser products can serve it; other products are out of scope. |
| max_overage_usd_per_1k | number | The most the plan may charge for each 1,000 emails beyond its included volume, in USD, for transactional email. A plan whose extra price is not published as a per-1,000 figure is unknown. |
| min_log_retention_days | integer | Days the plan must keep the logs or events of sent email where the account can read them, for transactional email. Longer retention sold as an add-on does not count. |
| monthly_document_pages | number | Pages of documents parsed per month, for document-parsing APIs (LlamaParse, Reducto, Unstructured, Mistral OCR, LandingAI, Amazon Textract, Google Document AI, Azure Document Intelligence, Datalab, Mathpix, Mindee, Nanonets, Upstage). A price given per credit is multiplied by the credits one page costs. It is the whole workload: give it instead of monthly_pages, monthly_searches, monthly_browser_hours, monthly_emails, monthly_characters and monthly_audio_hours, not with them. Only document-parsing products can serve it; other products are out of scope. |
| needs_table_extraction | boolean | The service must return the tables of a page as structure (rows and cells), not only the text, for document parsing. |
| search_returns_content | boolean | The search response itself must carry the text of the result pages (extracted content), not only titles, links and snippets. |
| min_requests_per_minute | number | Minimum request rate the plan must allow, per minute. |
| browser_seconds_per_page | number | Browser time per page in seconds, for headless-browser products billed by time. Every plan must then serve pages that take this long: a hosted browser does, a request-based API only when one request may run that long. |
| realtime_search_required | boolean | Search results must be returned in real time (not through a queue). |
| target_errors_not_billed | boolean | Error responses from the target site (e.g. 404) must not be billed. |
| needs_recurring_free_tier | boolean | The plan must be usable every month without paying (a free plan with a monthly allowance or a monthly free credit). |
| failed_requests_not_billed | boolean | Requests that fail on the provider side (timeouts, blocks, 5xx) must not be billed. A flat monthly price for unlimited requests meets it, since no request is billed on its own; when only success-based billing will do, use only_successful_requests_billed. |
| structured_extraction_pages | integer | How many of the pages must come back as JSON fields rather than HTML or text, by any method the plan offers (CSS or XPath selectors, a schema, or AI). When the fields must be found without writing selectors, use ai_extraction_pages instead; each page counts in one of the two. |
| only_successful_requests_billed | boolean | Billing must count successful requests only: each successful request is charged (or draws credits) and failed ones cost nothing. A flat monthly price for unlimited requests does not meet it, since the price is the same whatever succeeds. |
{
"type": "object",
"properties": {
"plans": {
"type": "array",
"items": {
"type": "string",
"maxLength": 300,
"minLength": 2
},
"maxItems": 20,
"minItems": 1,
"description": "Plans given by provider and plan name (e.g. \"ScrapingBee Freelance\") or by pricing-page URL, for plans found elsewhere. A name or URL that fits several plans returns the candidates under resolution and no verdict.",
"uniqueItems": true
},
"detail": {
"enum": [
"summary",
"full"
],
"type": "string",
"default": "summary",
"description": "summary returns one source sentence per fact; full returns every recorded fact and sentence."
},
"format": {
"enum": [
"full",
"brief"
],
"type": "string",
"default": "full",
"description": "brief returns, per plan, the plan, provider, whether it meets all, the monthly cost and the requested conditions only, each with its verdict, a one-line reason, one source sentence and its source (about a quarter of the full size); the verdicts and costs are those of full. Call it right before choosing or buying a plan."
},
"mcp_auth": {
"type": "array",
"items": {
"enum": [
"api_key",
"oauth"
],
"type": "string"
},
"minItems": 1,
"description": "Ways to authenticate to the provider's hosted MCP endpoint, any one of which will do: api_key, oauth. Met when the endpoint accepts at least one of them; implies a hosted endpoint.",
"uniqueItems": true
},
"needs_zdr": {
"type": "boolean",
"description": "Zero data retention must be usable on this plan. A provider that offers it only on a custom enterprise agreement does not meet it on its listed plans."
},
"offer_ids": {
"type": "array",
"items": {
"type": "string",
"maxLength": 80,
"minLength": 1
},
"maxItems": 20,
"minItems": 1,
"description": "Plan ids to check (from search or get_details).",
"uniqueItems": true
},
"preferred": {
"type": "object",
"properties": {
"mcp_auth": {
"type": "array",
"items": {
"enum": [
"api_key",
"oauth"
],
"type": "string"
},
"minItems": 1,
"description": "Ways to authenticate to the provider's hosted MCP endpoint, any one of which will do: api_key, oauth. Met when the endpoint accepts at least one of them; implies a hosted endpoint.",
"uniqueItems": true
},
"needs_zdr": {
"type": "boolean",
"description": "Zero data retention must be usable on this plan. A provider that offers it only on a custom enterprise agreement does not meet it on its listed plans."
},
"needs_soc2": {
"enum": [
true,
false,
"II"
],
"type": [
"boolean",
"string"
],
"description": "The provider must hold a SOC 2 report: true for Type I or Type II, \"II\" for Type II."
},
"needs_batch": {
"type": "boolean",
"description": "The plan must transcribe recorded audio (a file or a stored recording), for speech-to-text. A plan priced for live audio only is not met."
},
"data_regions": {
"type": "array",
"items": {
"type": "string",
"maxLength": 20,
"minLength": 2
},
"minItems": 1,
"description": "Regions where data must be stored or processed, e.g. [\"EU\"]. Different from exit-IP countries.",
"uniqueItems": true
},
"needs_korean": {
"type": "boolean",
"description": "The service must voice Korean text (text-to-speech) or transcribe Korean speech (speech-to-text)."
},
"billing_types": {
"type": "array",
"items": {
"enum": [
"monthly_subscription",
"annual_subscription",
"pay_as_you_go",
"prepaid_credits"
],
"type": "string"
},
"minItems": 1,
"description": "Acceptable billing: monthly_subscription (A plan with a fixed fee (or minimum commitment) billed every month.) annual_subscription (A plan paid for a year at a time.) pay_as_you_go (No plan fee; a price per unit of use, billed after use or drawn from a balance topped up with any amount.) prepaid_credits (Money paid before use: a credit pack, a balance topped up first, or a plan amount charged in advance for the period.) Free plans always qualify.",
"uniqueItems": true
},
"needs_inbound": {
"type": "boolean",
"description": "The service must receive email for the buyer and hand it on (inbound parsing, routes), for transactional email."
},
"search_engines": {
"type": "array",
"items": {
"enum": [
"google",
"bing",
"yahoo",
"yandex",
"baidu",
"duckduckgo",
"naver",
"brave"
],
"type": "string"
},
"minItems": 1,
"description": "Search engines whose results the plan must return, each at the plan's search price: google, bing, yahoo, yandex, baidu, duckduckgo, naver, brave (brave is Brave's own index). monthly_searches is the total over all of them.",
"uniqueItems": true
},
"captcha_solving": {
"type": "boolean",
"description": "The plan must solve CAPTCHAs for the browser sessions (the vendor does it, not the buyer own service)."
},
"min_concurrency": {
"type": "integer",
"minimum": 1,
"description": "Minimum number of concurrent requests (or browsers) the plan must allow."
},
"needs_streaming": {
"type": "boolean",
"description": "The service must return audio in real time as it is made (streaming or a WebSocket), for text-to-speech; for speech-to-text, it must transcribe live audio as it arrives. A speech-to-text price line is per mode, so a plan priced for recorded audio only is not met."
},
"needs_remote_mcp": {
"type": "boolean",
"description": "The provider must host a remote MCP endpoint (a URL an MCP client connects to). An official server that can only be run on the buyer own machine does not meet it."
},
"proxies_included": {
"type": "boolean",
"description": "The plan must include proxy traffic of the vendor (some gigabytes in the plan fee). Proxy traffic sold only per gigabyte on top of the fee, or only on another plan, does not count."
},
"search_countries": {
"type": "array",
"items": {
"type": "string",
"pattern": "^[A-Z]{2}$"
},
"minItems": 1,
"description": "ISO 3166-1 alpha-2 codes of the countries whose search results the searches must return (the search engine's country setting, e.g. Google gl), e.g. [\"GB\",\"CA\"]. Different from exit_ip_countries.",
"uniqueItems": true
},
"exit_ip_countries": {
"type": "array",
"items": {
"type": "string",
"pattern": "^[A-Z]{2}$"
},
"minItems": 1,
"description": "ISO 3166-1 alpha-2 codes of countries the page requests must exit from, e.g. [\"US\",\"DE\"]. For search results of a country use search_countries.",
"uniqueItems": true
},
"min_pages_per_doc": {
"type": "integer",
"minimum": 1,
"description": "Pages one document may have at the most the plan allows, for document parsing. Met when the stated limit is at least this many (or the pages say there is no page limit); a plan whose pages do not state a limit is unknown. The limit of the largest way of sending (batch or asynchronous) counts."
},
"needs_diarization": {
"type": "boolean",
"description": "The plan must label who spoke (speaker diarization), for speech-to-text. Where the vendor charges extra for it, the extra price is added to the monthly cost; where the pages state no price or no inclusion the plan is unknown."
},
"needs_no_training": {
"type": "boolean",
"description": "An official page must say the vendor does not use the buyer's text, audio or documents to train its models without the buyer opting in. A use that is on by default with an opt-out to ask for does not count."
},
"session_recording": {
"type": "boolean",
"description": "The plan must record browser sessions (video or replay) that the buyer can watch afterwards."
},
"needs_dedicated_ip": {
"type": "boolean",
"description": "The plan must come with a dedicated sending IP address, for transactional email. A dedicated IP sold only as an add-on on top of the plan, or only on another plan, does not count."
},
"needs_official_mcp": {
"type": "boolean",
"description": "The provider must publish its own MCP server (hosted by it or run by the buyer), stated in its official documentation. A server only a third party published does not count."
},
"min_pages_per_crawl": {
"type": "integer",
"minimum": 1,
"description": "Pages one crawl job (from one start URL, following links) must be able to reach. A plan whose crawl has no page cap meets any number; give the size of the largest site to crawl. Different from the monthly page total."
},
"min_sending_domains": {
"type": "integer",
"minimum": 1,
"description": "Sending domains the plan must let one account authenticate, for transactional email. Met when the stated limit is at least this many (or the pages say it is unlimited); a plan whose pages do not state a limit is unknown."
},
"min_session_minutes": {
"type": "number",
"description": "Minutes one browser session must be able to run on this plan, for hosted browsers. Met when the stated longest session of the plan is at least this long; a plan whose pages do not state a session limit is unknown, and a limit the page gives only for another plan is not met.",
"exclusiveMinimum": 0
},
"needs_voice_cloning": {
"type": "boolean",
"description": "The plan must let the account clone a voice from its own recording, for text-to-speech. Cloning limited to eligible customers, a request form or an enterprise plan does not count for a plan that is not that plan."
},
"persistent_profiles": {
"type": "boolean",
"description": "The plan must keep browser profiles (login state, cookies) between sessions."
},
"search_result_types": {
"type": "array",
"items": {
"enum": [
"organic",
"ads",
"local_pack",
"knowledge_graph",
"people_also_ask",
"related_searches",
"shopping",
"news",
"images",
"videos",
"ai_overview"
],
"type": "string"
},
"minItems": 1,
"description": "Result types the parsed search response must contain: organic, ads, local_pack, knowledge_graph, people_also_ask, related_searches, shopping, news, images, videos, ai_overview.",
"uniqueItems": true
},
"max_monthly_cost_usd": {
"type": "number",
"minimum": 0,
"description": "Monthly budget in USD before tax. Compared with listed prices; annual plans use their per-month equivalent."
},
"needs_batch_discount": {
"type": "boolean",
"description": "An official page must say a batch or asynchronous way of sending documents costs less than the list price on the plan, for document parsing. The budget and the cost are judged at the list price, not at the batch price."
},
"needs_commercial_use": {
"type": "boolean",
"description": "The plan must allow commercial use of the generated audio, for text-to-speech. A free plan limited to non-commercial use does not count; a plan whose pages do not say is unknown."
},
"needs_no_min_billing": {
"type": "boolean",
"description": "An official page must say audio is billed by the second (or an increment of seconds) with no minimum billed duration per request, for speech-to-text. A page that says nothing about rounding is unknown."
},
"max_overage_usd_per_1k": {
"type": "number",
"minimum": 0,
"description": "The most the plan may charge for each 1,000 emails beyond its included volume, in USD, for transactional email. A plan whose extra price is not published as a per-1,000 figure is unknown."
},
"min_log_retention_days": {
"type": "integer",
"minimum": 1,
"description": "Days the plan must keep the logs or events of sent email where the account can read them, for transactional email. Longer retention sold as an add-on does not count."
},
"needs_table_extraction": {
"type": "boolean",
"description": "The service must return the tables of a page as structure (rows and cells), not only the text, for document parsing."
},
"search_returns_content": {
"type": "boolean",
"description": "The search response itself must carry the text of the result pages (extracted content), not only titles, links and snippets."
},
"min_requests_per_minute": {
"type": "number",
"description": "Minimum request rate the plan must allow, per minute.",
"exclusiveMinimum": 0
},
"realtime_search_required": {
"type": "boolean",
"description": "Search results must be returned in real time (not through a queue)."
},
"target_errors_not_billed": {
"type": "boolean",
"description": "Error responses from the target site (e.g. 404) must not be billed."
},
"needs_recurring_free_tier": {
"type": "boolean",
"description": "The plan must be usable every month without paying (a free plan with a monthly allowance or a monthly free credit)."
},
"failed_requests_not_billed": {
"type": "boolean",
"description": "Requests that fail on the provider side (timeouts, blocks, 5xx) must not be billed. A flat monthly price for unlimited requests meets it, since no request is billed on its own; when only success-based billing will do, use only_successful_requests_billed."
},
"only_successful_requests_billed": {
"type": "boolean",
"description": "Billing must count successful requests only: each successful request is charged (or draws credits) and failed ones cost nothing. A flat monthly price for unlimited requests does not meet it, since the price is the same whatever succeeds."
}
},
"description": "Nice-to-have conditions; they do not filter, they break ties.",
"additionalProperties": false
},
"needs_soc2": {
"enum": [
true,
false,
"II"
],
"type": [
"boolean",
"string"
],
"description": "The provider must hold a SOC 2 report: true for Type I or Type II, \"II\" for Type II."
},
"needs_batch": {
"type": "boolean",
"description": "The plan must transcribe recorded audio (a file or a stored recording), for speech-to-text. A plan priced for live audio only is not met."
},
"data_regions": {
"type": "array",
"items": {
"type": "string",
"maxLength": 20,
"minLength": 2
},
"minItems": 1,
"description": "Regions where data must be stored or processed, e.g. [\"EU\"]. Different from exit-IP countries.",
"uniqueItems": true
},
"needs_korean": {
"type": "boolean",
"description": "The service must voice Korean text (text-to-speech) or transcribe Korean speech (speech-to-text)."
},
"billing_types": {
"type": "array",
"items": {
"enum": [
"monthly_subscription",
"annual_subscription",
"pay_as_you_go",
"prepaid_credits"
],
"type": "string"
},
"minItems": 1,
"description": "Acceptable billing: monthly_subscription (A plan with a fixed fee (or minimum commitment) billed every month.) annual_subscription (A plan paid for a year at a time.) pay_as_you_go (No plan fee; a price per unit of use, billed after use or drawn from a balance topped up with any amount.) prepaid_credits (Money paid before use: a credit pack, a balance topped up first, or a plan amount charged in advance for the period.) Free plans always qualify.",
"uniqueItems": true
},
"monthly_pages": {
"type": "object",
"properties": {
"javascript": {
"type": "integer",
"minimum": 0
},
"plain_html": {
"type": "integer",
"minimum": 0
},
"premium_proxy": {
"type": "integer",
"minimum": 0
},
"javascript_premium_proxy": {
"type": "integer",
"minimum": 0
}
},
"description": "Pages per month by type: plain_html (static pages), javascript (needs rendering), premium_proxy (blocked sites that need residential/premium proxies), javascript_premium_proxy (both).",
"minProperties": 1,
"additionalProperties": false
},
"needs_inbound": {
"type": "boolean",
"description": "The service must receive email for the buyer and hand it on (inbound parsing, routes), for transactional email."
},
"monthly_emails": {
"type": "number",
"description": "Emails sent per month, for transactional email APIs (SendGrid, Mailgun, Postmark, Resend, Amazon SES, Brevo, Mailtrap, Loops). It is the whole workload: give it instead of monthly_pages, monthly_searches and monthly_browser_hours, not with them. Only email products can serve it; other products are out of scope.",
"exclusiveMinimum": 0
},
"search_engines": {
"type": "array",
"items": {
"enum": [
"google",
"bing",
"yahoo",
"yandex",
"baidu",
"duckduckgo",
"naver",
"brave"
],
"type": "string"
},
"minItems": 1,
"description": "Search engines whose results the plan must return, each at the plan's search price: google, bing, yahoo, yandex, baidu, duckduckgo, naver, brave (brave is Brave's own index). monthly_searches is the total over all of them.",
"uniqueItems": true
},
"captcha_solving": {
"type": "boolean",
"description": "The plan must solve CAPTCHAs for the browser sessions (the vendor does it, not the buyer own service)."
},
"min_concurrency": {
"type": "integer",
"minimum": 1,
"description": "Minimum number of concurrent requests (or browsers) the plan must allow."
},
"needs_streaming": {
"type": "boolean",
"description": "The service must return audio in real time as it is made (streaming or a WebSocket), for text-to-speech; for speech-to-text, it must transcribe live audio as it arrives. A speech-to-text price line is per mode, so a plan priced for recorded audio only is not met."
},
"monthly_searches": {
"type": "integer",
"minimum": 0,
"description": "Search requests per month (one results page each)."
},
"needs_remote_mcp": {
"type": "boolean",
"description": "The provider must host a remote MCP endpoint (a URL an MCP client connects to). An official server that can only be run on the buyer own machine does not meet it."
},
"proxies_included": {
"type": "boolean",
"description": "The plan must include proxy traffic of the vendor (some gigabytes in the plan fee). Proxy traffic sold only per gigabyte on top of the fee, or only on another plan, does not count."
},
"search_countries": {
"type": "array",
"items": {
"type": "string",
"pattern": "^[A-Z]{2}$"
},
"minItems": 1,
"description": "ISO 3166-1 alpha-2 codes of the countries whose search results the searches must return (the search engine's country setting, e.g. Google gl), e.g. [\"GB\",\"CA\"]. Different from exit_ip_countries.",
"uniqueItems": true
},
"exit_ip_countries": {
"type": "array",
"items": {
"type": "string",
"pattern": "^[A-Z]{2}$"
},
"minItems": 1,
"description": "ISO 3166-1 alpha-2 codes of countries the page requests must exit from, e.g. [\"US\",\"DE\"]. For search results of a country use search_countries.",
"uniqueItems": true
},
"min_pages_per_doc": {
"type": "integer",
"minimum": 1,
"description": "Pages one document may have at the most the plan allows, for document parsing. Met when the stated limit is at least this many (or the pages say there is no page limit); a plan whose pages do not state a limit is unknown. The limit of the largest way of sending (batch or asynchronous) counts."
},
"needs_diarization": {
"type": "boolean",
"description": "The plan must label who spoke (speaker diarization), for speech-to-text. Where the vendor charges extra for it, the extra price is added to the monthly cost; where the pages state no price or no inclusion the plan is unknown."
},
"needs_no_training": {
"type": "boolean",
"description": "An official page must say the vendor does not use the buyer's text, audio or documents to train its models without the buyer opting in. A use that is on by default with an opt-out to ask for does not count."
},
"session_recording": {
"type": "boolean",
"description": "The plan must record browser sessions (video or replay) that the buyer can watch afterwards."
},
"monthly_characters": {
"type": "number",
"description": "Characters of text voiced per month, for text-to-speech APIs (ElevenLabs, Cartesia, Deepgram Aura, OpenAI, Google Cloud, Amazon Polly, Azure, Gradium, Rime, Inworld, MiniMax, Murf, Hume). It is the whole workload: give it instead of monthly_pages, monthly_searches, monthly_browser_hours and monthly_emails, not with them. Only text-to-speech products can serve it; other products are out of scope.",
"exclusiveMinimum": 0
},
"needs_dedicated_ip": {
"type": "boolean",
"description": "The plan must come with a dedicated sending IP address, for transactional email. A dedicated IP sold only as an add-on on top of the plan, or only on another plan, does not count."
},
"needs_official_mcp": {
"type": "boolean",
"description": "The provider must publish its own MCP server (hosted by it or run by the buyer), stated in its official documentation. A server only a third party published does not count."
},
"ai_extraction_pages": {
"type": "integer",
"minimum": 0,
"description": "How many of the pages need their fields extracted by an AI model (from a prompt or a schema, or automatically) without writing selectors. Each page counts in one of the two extraction fields."
},
"min_pages_per_crawl": {
"type": "integer",
"minimum": 1,
"description": "Pages one crawl job (from one start URL, following links) must be able to reach. A plan whose crawl has no page cap meets any number; give the size of the largest site to crawl. Different from the monthly page total."
},
"min_sending_domains": {
"type": "integer",
"minimum": 1,
"description": "Sending domains the plan must let one account authenticate, for transactional email. Met when the stated limit is at least this many (or the pages say it is unlimited); a plan whose pages do not state a limit is unknown."
},
"min_session_minutes": {
"type": "number",
"description": "Minutes one browser session must be able to run on this plan, for hosted browsers. Met when the stated longest session of the plan is at least this long; a plan whose pages do not state a session limit is unknown, and a limit the page gives only for another plan is not met.",
"exclusiveMinimum": 0
},
"monthly_audio_hours": {
"type": "number",
"description": "Hours of audio transcribed per month, for speech-to-text APIs (Deepgram, AssemblyAI, Speechmatics, Amazon Transcribe, Google Cloud, OpenAI). A price given per minute is multiplied by 60. It is the whole workload: give it instead of monthly_pages, monthly_searches, monthly_browser_hours, monthly_emails and monthly_characters, not with them. Only speech-to-text products can serve it; other products are out of scope.",
"exclusiveMinimum": 0
},
"monthly_pages_total": {
"type": "integer",
"minimum": 0,
"description": "Total pages per month when the split by type is not known yet. Costs and verdicts then cover every share of JavaScript-rendered pages from 0% to 100% of the total (no premium proxies), and the result lists monthly_pages under needs_input."
},
"needs_voice_cloning": {
"type": "boolean",
"description": "The plan must let the account clone a voice from its own recording, for text-to-speech. Cloning limited to eligible customers, a request form or an enterprise plan does not count for a plan that is not that plan."
},
"persistent_profiles": {
"type": "boolean",
"description": "The plan must keep browser profiles (login state, cookies) between sessions."
},
"search_result_types": {
"type": "array",
"items": {
"enum": [
"organic",
"ads",
"local_pack",
"knowledge_graph",
"people_also_ask",
"related_searches",
"shopping",
"news",
"images",
"videos",
"ai_overview"
],
"type": "string"
},
"minItems": 1,
"description": "Result types the parsed search response must contain: organic, ads, local_pack, knowledge_graph, people_also_ask, related_searches, shopping, news, images, videos, ai_overview.",
"uniqueItems": true
},
"max_monthly_cost_usd": {
"type": "number",
"minimum": 0,
"description": "Monthly budget in USD before tax. Compared with listed prices; annual plans use their per-month equivalent."
},
"needs_batch_discount": {
"type": "boolean",
"description": "An official page must say a batch or asynchronous way of sending documents costs less than the list price on the plan, for document parsing. The budget and the cost are judged at the list price, not at the batch price."
},
"needs_commercial_use": {
"type": "boolean",
"description": "The plan must allow commercial use of the generated audio, for text-to-speech. A free plan limited to non-commercial use does not count; a plan whose pages do not say is unknown."
},
"needs_no_min_billing": {
"type": "boolean",
"description": "An official page must say audio is billed by the second (or an increment of seconds) with no minimum billed duration per request, for speech-to-text. A page that says nothing about rounding is unknown."
},
"monthly_browser_hours": {
"type": "number",
"description": "Browser time per month in hours, for hosted browsers (Browserbase, Browserless) billed by browser time. It is the whole workload: give it instead of monthly_pages, monthly_searches and browser_seconds_per_page, not with them. Only browser products can serve it; other products are out of scope.",
"exclusiveMinimum": 0
},
"max_overage_usd_per_1k": {
"type": "number",
"minimum": 0,
"description": "The most the plan may charge for each 1,000 emails beyond its included volume, in USD, for transactional email. A plan whose extra price is not published as a per-1,000 figure is unknown."
},
"min_log_retention_days": {
"type": "integer",
"minimum": 1,
"description": "Days the plan must keep the logs or events of sent email where the account can read them, for transactional email. Longer retention sold as an add-on does not count."
},
"monthly_document_pages": {
"type": "number",
"description": "Pages of documents parsed per month, for document-parsing APIs (LlamaParse, Reducto, Unstructured, Mistral OCR, LandingAI, Amazon Textract, Google Document AI, Azure Document Intelligence, Datalab, Mathpix, Mindee, Nanonets, Upstage). A price given per credit is multiplied by the credits one page costs. It is the whole workload: give it instead of monthly_pages, monthly_searches, monthly_browser_hours, monthly_emails, monthly_characters and monthly_audio_hours, not with them. Only document-parsing products can serve it; other products are out of scope.",
"exclusiveMinimum": 0
},
"needs_table_extraction": {
"type": "boolean",
"description": "The service must return the tables of a page as structure (rows and cells), not only the text, for document parsing."
},
"search_returns_content": {
"type": "boolean",
"description": "The search response itself must carry the text of the result pages (extracted content), not only titles, links and snippets."
},
"min_requests_per_minute": {
"type": "number",
"description": "Minimum request rate the plan must allow, per minute.",
"exclusiveMinimum": 0
},
"browser_seconds_per_page": {
"type": "number",
"description": "Browser time per page in seconds, for headless-browser products billed by time. Every plan must then serve pages that take this long: a hosted browser does, a request-based API only when one request may run that long.",
"exclusiveMinimum": 0
},
"realtime_search_required": {
"type": "boolean",
"description": "Search results must be returned in real time (not through a queue)."
},
"target_errors_not_billed": {
"type": "boolean",
"description": "Error responses from the target site (e.g. 404) must not be billed."
},
"needs_recurring_free_tier": {
"type": "boolean",
"description": "The plan must be usable every month without paying (a free plan with a monthly allowance or a monthly free credit)."
},
"failed_requests_not_billed": {
"type": "boolean",
"description": "Requests that fail on the provider side (timeouts, blocks, 5xx) must not be billed. A flat monthly price for unlimited requests meets it, since no request is billed on its own; when only success-based billing will do, use only_successful_requests_billed."
},
"structured_extraction_pages": {
"type": "integer",
"minimum": 0,
"description": "How many of the pages must come back as JSON fields rather than HTML or text, by any method the plan offers (CSS or XPath selectors, a schema, or AI). When the fields must be found without writing selectors, use ai_extraction_pages instead; each page counts in one of the two."
},
"only_successful_requests_billed": {
"type": "boolean",
"description": "Billing must count successful requests only: each successful request is charged (or draws credits) and failed ones cost nothing. A flat monthly price for unlimited requests does not meet it, since the price is the same whatever succeeds."
}
},
"description": "Give offer_ids, plans or both; 20 plans at most in total.",
"additionalProperties": false
}Use this when: the user asks how the cost changes as the workload grows or shifts, or at what volume another plan becomes the cheapest. Do not use this when: the workload is fixed (use search). Show how API plan costs change when the monthly workload changes, for example twice the pages or a larger share of JavaScript pages. Along the path from the current to a target workload it returns the cheapest fully matching plan at both ends, each workload where the cheapest plan changes, and for tracked plans where the cost first steps up, where the plan can no longer cover the volume and where the budget is exceeded. Costs follow published pricing rules (whole packs of extra credits, per-period pack limits, per-connection browser billing, monthly minimums) with official source sentences. Example: 10,000 searches a month growing to 200,000.
| Argument | Type | Description |
|---|---|---|
| scale | number | Multiply every monthly count by this factor for the end of the path, e.g. 2 for twice the current workload. Give target or scale. |
| detail | string | summary returns one source sentence per fact; full returns every recorded fact and sentence. |
| target | object | Workload at the end of the path; fields not given keep their current value. Give target or scale. |
| mcp_auth | array | Ways to authenticate to the provider's hosted MCP endpoint, any one of which will do: api_key, oauth. Met when the endpoint accepts at least one of them; implies a hosted endpoint. |
| needs_zdr | boolean |
Use this when: you need every recorded condition, pricing rule and source sentence of one plan or product found by search or named by the user. Do not use this when: you want to compare plans against a workload (use search or check_conditions). Get every recorded condition for one API plan or product: value, which plans it applies to, exceptions, official source sentence, check date and purchase link. A product too long for one response comes with one source sentence per fact. Example: every recorded condition of 1 plan found by search.
| Argument | Type | Description |
|---|---|---|
| offer_id | string | A plan id, e.g. "firecrawl-standard". |
| product_id | string | A product id, e.g. "firecrawl-api". |
{
"type": "object",
"properties": {
"offer_id": {
"type": "string",
"maxLength": 80,
"minLength": 1,
"description": "A plan id, e.g. \"firecrawl-standard\"."
},
"product_id": {
"type": "string",
"maxLength": 80,
"minLength": 1,
"description": "A product id, e.g. \"firecrawl-api\"."
}
},
"description": "Give exactly one of offer_id or product_id.",
"additionalProperties": false
}Use this when: search finds no plan or too few plans and the user wants to know which condition to loosen and by how much. Do not use this when: plans already match (use search or check_conditions). When no API plan, or too few API plans, meet every required condition: for each condition the user can change, returns the smallest change that lets at least one plan meet everything (for example the monthly budget needed, the concurrency available, or one exit-IP country to drop) and the plans it admits with their monthly cost. Also lists plans that fail only because a condition is not stated on the official pages, with the pages checked and the check date, so the user can confirm with the provider. Example: no plan meets 5,000 hours of audio a month under $100.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Maximum plans listed for each change and under confirm_with_provider (default 3). |
| detail | string | summary returns one source sentence per fact; full returns every recorded fact and sentence. |
| mcp_auth | array | Ways to authenticate to the provider's hosted MCP endpoint, any one of which will do: api_key, oauth. Met when the endpoint accepts at least one of them; implies a hosted endpoint. |
| needs_zdr | boolean | Zero data retention must be usable on this plan. A provider that offers it only on a custom enterprise agreement does not meet it on its listed plans. |
| preferred | object | Nice-to-have conditions; they do not filter, they break ties. |
Call this right before choosing or buying an API plan: it returns, for each plan, whether it meets every condition, the monthly cost, and the official sentence behind each verdict. Use this when: the user wants to know which API plans (web scraping, SERP, web search, browser infrastructure, transactional email, text-to-speech, speech-to-text, document parsing) fit a monthly workload, budget or required conditions, or what one would cost per month at that workload. Do not use this when: the user wants to scrape, search the web, send email, generate speech, transcribe audio or parse a document itself (this tool reads no pages and calls no provider), needs proxies only, or asks about an API outside these fields. Call it right before you choose or buy a tool or plan; format "brief" returns a short answer. Find API plans (web scraping, SERP, web search, browser infrastructure, transactional email, text-to-speech, speech-to-text, document parsing) that meet required conditions: monthly pages by type (plain HTML, JavaScript rendering, blocked sites that need premium proxies), monthly searches, concurrency, requests per minute, monthly budget before tax, billing type, exit-IP countries, search engines, search-result countries and parsed result types, pages per crawl, data storage region and structured (JSON) or AI extraction. Browser infrastructure is asked in monthly browser hours, transactional email in monthly emails, text-to-speech in monthly characters, speech-to-text in monthly audio hours and document parsing in monthly document pages, each with its own conditions (for example session length, dedicated IP, voice cloning, Korean, live or recorded audio, speaker labels, pages per document, table extraction, batch discount). For search APIs it also checks the agent connection: an official or remote (hosted) MCP server and how it signs in (API key or OAuth), zero data retention on the plan, a SOC 2 report, and whether results carry the page text. Returns each plan's monthly cost, whether it meets every required condition, and for every condition met / not met / unknown with the official source sentence and check date, plus a purchase link. Plans with an unknown required condition are listed separately as partial matches. If nothing matches, returns how many plans each condition excluded and the cheapest plan that meets all the other conditions. If you already have candidate plans or providers (for example from a web search), pass them as providers (search) or offer_ids (check_conditions) so that only those are judged. Hosts that support MCP Apps show the result as a comparison card. Example: 50,000 SERP searches a month in GB under $100; 300 hours of Korean audio a month with speaker labels.
Use this when: you have drafted an answer that names API plans, costs or whether they meet the user's conditions, before you give it. Do not use this when: you have not looked up any plan yet (use search). Check what a drafted answer says about API plans against the recorded official facts, using the user's conditions as given in request. For each plan claim (plan id, name or pricing-page URL, with the stated billing, monthly cost, whether it meets every condition, single condition verdicts and recorded values) it returns conflicts with the official source sentences, the check date and a one-line fix: a plan not in the catalog, unmet or unknown conditions stated as met, met stated as unmet, a condition verdict, a cost outside the computed cost or range, or a value that differs. It also lists verdicts that rest on a derived value, official pages that disagree or a two-value price range (state the condition), plans it could not check (an ambiguous name returns the candidates), the cheapest plan that meets every condition when the answer does not name it, and words of the question that suggest a condition the request does not carry. Example: a drafted answer says 1 plan costs $49 a month for 100,000 emails.
| Argument | Type | Description |
|---|---|---|
| claims* | array | One entry per plan the answer names, with what the answer says about it. |
| request* | object | The user's workload and required conditions as you understood them, in the search input format. Each claim is judged against these, not against earlier calls. |
| question | string | The user's words, if available. Read only for words that suggest a condition the request does not carry. |
| Zero data retention must be usable on this plan. A provider that offers it only on a custom enterprise agreement does not meet it on its listed plans. |
| offer_ids | array | Compare only these plans and follow each of them along the path. Default: every plan that can serve the workload, following the cheapest full match at the start. |
| preferred | object | Nice-to-have conditions; they do not filter, they break ties. |
| needs_soc2 | boolean | string | The provider must hold a SOC 2 report: true for Type I or Type II, "II" for Type II. |
| needs_batch | boolean | The plan must transcribe recorded audio (a file or a stored recording), for speech-to-text. A plan priced for live audio only is not met. |
| data_regions | array | Regions where data must be stored or processed, e.g. ["EU"]. Different from exit-IP countries. |
| needs_korean | boolean | The service must voice Korean text (text-to-speech) or transcribe Korean speech (speech-to-text). |
| billing_types | array | Acceptable billing: monthly_subscription (A plan with a fixed fee (or minimum commitment) billed every month.) annual_subscription (A plan paid for a year at a time.) pay_as_you_go (No plan fee; a price per unit of use, billed after use or drawn from a balance topped up with any amount.) prepaid_credits (Money paid before use: a credit pack, a balance topped up first, or a plan amount charged in advance for the period.) Free plans always qualify. |
| monthly_pages | object | Pages per month by type: plain_html (static pages), javascript (needs rendering), premium_proxy (blocked sites that need residential/premium proxies), javascript_premium_proxy (both). |
| needs_inbound | boolean | The service must receive email for the buyer and hand it on (inbound parsing, routes), for transactional email. |
| product_types | array | Limit to these product types. Default: every type that can serve the workload. |
| search_engines | array | Search engines whose results the plan must return, each at the plan's search price: google, bing, yahoo, yandex, baidu, duckduckgo, naver, brave (brave is Brave's own index). monthly_searches is the total over all of them. |
| captcha_solving | boolean | The plan must solve CAPTCHAs for the browser sessions (the vendor does it, not the buyer own service). |
| min_concurrency | integer | Minimum number of concurrent requests (or browsers) the plan must allow. |
| needs_streaming | boolean | The service must return audio in real time as it is made (streaming or a WebSocket), for text-to-speech; for speech-to-text, it must transcribe live audio as it arrives. A speech-to-text price line is per mode, so a plan priced for recorded audio only is not met. |
| monthly_searches | integer | Search requests per month (one results page each). |
| needs_remote_mcp | boolean | The provider must host a remote MCP endpoint (a URL an MCP client connects to). An official server that can only be run on the buyer own machine does not meet it. |
| proxies_included | boolean | The plan must include proxy traffic of the vendor (some gigabytes in the plan fee). Proxy traffic sold only per gigabyte on top of the fee, or only on another plan, does not count. |
| search_countries | array | ISO 3166-1 alpha-2 codes of the countries whose search results the searches must return (the search engine's country setting, e.g. Google gl), e.g. ["GB","CA"]. Different from exit_ip_countries. |
| exit_ip_countries | array | ISO 3166-1 alpha-2 codes of countries the page requests must exit from, e.g. ["US","DE"]. For search results of a country use search_countries. |
| min_pages_per_doc | integer | Pages one document may have at the most the plan allows, for document parsing. Met when the stated limit is at least this many (or the pages say there is no page limit); a plan whose pages do not state a limit is unknown. The limit of the largest way of sending (batch or asynchronous) counts. |
| needs_diarization | boolean | The plan must label who spoke (speaker diarization), for speech-to-text. Where the vendor charges extra for it, the extra price is added to the monthly cost; where the pages state no price or no inclusion the plan is unknown. |
| needs_no_training | boolean | An official page must say the vendor does not use the buyer's text, audio or documents to train its models without the buyer opting in. A use that is on by default with an opt-out to ask for does not count. |
| session_recording | boolean | The plan must record browser sessions (video or replay) that the buyer can watch afterwards. |
| needs_dedicated_ip | boolean | The plan must come with a dedicated sending IP address, for transactional email. A dedicated IP sold only as an add-on on top of the plan, or only on another plan, does not count. |
| needs_official_mcp | boolean | The provider must publish its own MCP server (hosted by it or run by the buyer), stated in its official documentation. A server only a third party published does not count. |
| ai_extraction_pages | integer | How many of the pages need their fields extracted by an AI model (from a prompt or a schema, or automatically) without writing selectors. Each page counts in one of the two extraction fields. |
| min_pages_per_crawl | integer | Pages one crawl job (from one start URL, following links) must be able to reach. A plan whose crawl has no page cap meets any number; give the size of the largest site to crawl. Different from the monthly page total. |
| min_sending_domains | integer | Sending domains the plan must let one account authenticate, for transactional email. Met when the stated limit is at least this many (or the pages say it is unlimited); a plan whose pages do not state a limit is unknown. |
| min_session_minutes | number | Minutes one browser session must be able to run on this plan, for hosted browsers. Met when the stated longest session of the plan is at least this long; a plan whose pages do not state a session limit is unknown, and a limit the page gives only for another plan is not met. |
| monthly_pages_total | integer | Total pages per month when the split by type is not known yet. Costs and verdicts then cover every share of JavaScript-rendered pages from 0% to 100% of the total (no premium proxies), and the result lists monthly_pages under needs_input. |
| needs_voice_cloning | boolean | The plan must let the account clone a voice from its own recording, for text-to-speech. Cloning limited to eligible customers, a request form or an enterprise plan does not count for a plan that is not that plan. |
| persistent_profiles | boolean | The plan must keep browser profiles (login state, cookies) between sessions. |
| search_result_types | array | Result types the parsed search response must contain: organic, ads, local_pack, knowledge_graph, people_also_ask, related_searches, shopping, news, images, videos, ai_overview. |
| max_monthly_cost_usd | number | Monthly budget in USD before tax. Compared with listed prices; annual plans use their per-month equivalent. |
| needs_batch_discount | boolean | An official page must say a batch or asynchronous way of sending documents costs less than the list price on the plan, for document parsing. The budget and the cost are judged at the list price, not at the batch price. |
| needs_commercial_use | boolean | The plan must allow commercial use of the generated audio, for text-to-speech. A free plan limited to non-commercial use does not count; a plan whose pages do not say is unknown. |
| needs_no_min_billing | boolean | An official page must say audio is billed by the second (or an increment of seconds) with no minimum billed duration per request, for speech-to-text. A page that says nothing about rounding is unknown. |
| max_overage_usd_per_1k | number | The most the plan may charge for each 1,000 emails beyond its included volume, in USD, for transactional email. A plan whose extra price is not published as a per-1,000 figure is unknown. |
| min_log_retention_days | integer | Days the plan must keep the logs or events of sent email where the account can read them, for transactional email. Longer retention sold as an add-on does not count. |
| needs_table_extraction | boolean | The service must return the tables of a page as structure (rows and cells), not only the text, for document parsing. |
| search_returns_content | boolean | The search response itself must carry the text of the result pages (extracted content), not only titles, links and snippets. |
| min_requests_per_minute | number | Minimum request rate the plan must allow, per minute. |
| browser_seconds_per_page | number | Browser time per page in seconds, for headless-browser products billed by time. Every plan must then serve pages that take this long: a hosted browser does, a request-based API only when one request may run that long. |
| realtime_search_required | boolean | Search results must be returned in real time (not through a queue). |
| target_errors_not_billed | boolean | Error responses from the target site (e.g. 404) must not be billed. |
| needs_recurring_free_tier | boolean | The plan must be usable every month without paying (a free plan with a monthly allowance or a monthly free credit). |
| failed_requests_not_billed | boolean | Requests that fail on the provider side (timeouts, blocks, 5xx) must not be billed. A flat monthly price for unlimited requests meets it, since no request is billed on its own; when only success-based billing will do, use only_successful_requests_billed. |
| structured_extraction_pages | integer | How many of the pages must come back as JSON fields rather than HTML or text, by any method the plan offers (CSS or XPath selectors, a schema, or AI). When the fields must be found without writing selectors, use ai_extraction_pages instead; each page counts in one of the two. |
| only_successful_requests_billed | boolean | Billing must count successful requests only: each successful request is charged (or draws credits) and failed ones cost nothing. A flat monthly price for unlimited requests does not meet it, since the price is the same whatever succeeds. |
{
"type": "object",
"properties": {
"scale": {
"type": "number",
"maximum": 1000,
"description": "Multiply every monthly count by this factor for the end of the path, e.g. 2 for twice the current workload. Give target or scale.",
"exclusiveMinimum": 0
},
"detail": {
"enum": [
"summary",
"full"
],
"type": "string",
"default": "summary",
"description": "summary returns one source sentence per fact; full returns every recorded fact and sentence."
},
"target": {
"type": "object",
"properties": {
"monthly_pages": {
"type": "object",
"properties": {
"javascript": {
"type": "integer",
"minimum": 0
},
"plain_html": {
"type": "integer",
"minimum": 0
},
"premium_proxy": {
"type": "integer",
"minimum": 0
},
"javascript_premium_proxy": {
"type": "integer",
"minimum": 0
}
},
"description": "Pages per month by type at the end of the path. Types not listed keep their current count; give 0 to drop a type.",
"minProperties": 1,
"additionalProperties": false
},
"monthly_searches": {
"type": "integer",
"minimum": 0,
"description": "Searches per month at the end of the path."
},
"ai_extraction_pages": {
"type": "integer",
"minimum": 0,
"description": "AI-extraction pages per month at the end of the path."
},
"structured_extraction_pages": {
"type": "integer",
"minimum": 0,
"description": "Structured-extraction pages per month at the end of the path."
}
},
"description": "Workload at the end of the path; fields not given keep their current value. Give target or scale.",
"minProperties": 1,
"additionalProperties": false
},
"mcp_auth": {
"type": "array",
"items": {
"enum": [
"api_key",
"oauth"
],
"type": "string"
},
"minItems": 1,
"description": "Ways to authenticate to the provider's hosted MCP endpoint, any one of which will do: api_key, oauth. Met when the endpoint accepts at least one of them; implies a hosted endpoint.",
"uniqueItems": true
},
"needs_zdr": {
"type": "boolean",
"description": "Zero data retention must be usable on this plan. A provider that offers it only on a custom enterprise agreement does not meet it on its listed plans."
},
"offer_ids": {
"type": "array",
"items": {
"type": "string",
"maxLength": 80,
"minLength": 1
},
"maxItems": 10,
"minItems": 1,
"description": "Compare only these plans and follow each of them along the path. Default: every plan that can serve the workload, following the cheapest full match at the start.",
"uniqueItems": true
},
"preferred": {
"type": "object",
"properties": {
"mcp_auth": {
"type": "array",
"items": {
"enum": [
"api_key",
"oauth"
],
"type": "string"
},
"minItems": 1,
"description": "Ways to authenticate to the provider's hosted MCP endpoint, any one of which will do: api_key, oauth. Met when the endpoint accepts at least one of them; implies a hosted endpoint.",
"uniqueItems": true
},
"needs_zdr": {
"type": "boolean",
"description": "Zero data retention must be usable on this plan. A provider that offers it only on a custom enterprise agreement does not meet it on its listed plans."
},
"needs_soc2": {
"enum": [
true,
false,
"II"
],
"type": [
"boolean",
"string"
],
"description": "The provider must hold a SOC 2 report: true for Type I or Type II, \"II\" for Type II."
},
"needs_batch": {
"type": "boolean",
"description": "The plan must transcribe recorded audio (a file or a stored recording), for speech-to-text. A plan priced for live audio only is not met."
},
"data_regions": {
"type": "array",
"items": {
"type": "string",
"maxLength": 20,
"minLength": 2
},
"minItems": 1,
"description": "Regions where data must be stored or processed, e.g. [\"EU\"]. Different from exit-IP countries.",
"uniqueItems": true
},
"needs_korean": {
"type": "boolean",
"description": "The service must voice Korean text (text-to-speech) or transcribe Korean speech (speech-to-text)."
},
"billing_types": {
"type": "array",
"items": {
"enum": [
"monthly_subscription",
"annual_subscription",
"pay_as_you_go",
"prepaid_credits"
],
"type": "string"
},
"minItems": 1,
"description": "Acceptable billing: monthly_subscription (A plan with a fixed fee (or minimum commitment) billed every month.) annual_subscription (A plan paid for a year at a time.) pay_as_you_go (No plan fee; a price per unit of use, billed after use or drawn from a balance topped up with any amount.) prepaid_credits (Money paid before use: a credit pack, a balance topped up first, or a plan amount charged in advance for the period.) Free plans always qualify.",
"uniqueItems": true
},
"needs_inbound": {
"type": "boolean",
"description": "The service must receive email for the buyer and hand it on (inbound parsing, routes), for transactional email."
},
"search_engines": {
"type": "array",
"items": {
"enum": [
"google",
"bing",
"yahoo",
"yandex",
"baidu",
"duckduckgo",
"naver",
"brave"
],
"type": "string"
},
"minItems": 1,
"description": "Search engines whose results the plan must return, each at the plan's search price: google, bing, yahoo, yandex, baidu, duckduckgo, naver, brave (brave is Brave's own index). monthly_searches is the total over all of them.",
"uniqueItems": true
},
"captcha_solving": {
"type": "boolean",
"description": "The plan must solve CAPTCHAs for the browser sessions (the vendor does it, not the buyer own service)."
},
"min_concurrency": {
"type": "integer",
"minimum": 1,
"description": "Minimum number of concurrent requests (or browsers) the plan must allow."
},
"needs_streaming": {
"type": "boolean",
"description": "The service must return audio in real time as it is made (streaming or a WebSocket), for text-to-speech; for speech-to-text, it must transcribe live audio as it arrives. A speech-to-text price line is per mode, so a plan priced for recorded audio only is not met."
},
"needs_remote_mcp": {
"type": "boolean",
"description": "The provider must host a remote MCP endpoint (a URL an MCP client connects to). An official server that can only be run on the buyer own machine does not meet it."
},
"proxies_included": {
"type": "boolean",
"description": "The plan must include proxy traffic of the vendor (some gigabytes in the plan fee). Proxy traffic sold only per gigabyte on top of the fee, or only on another plan, does not count."
},
"search_countries": {
"type": "array",
"items": {
"type": "string",
"pattern": "^[A-Z]{2}$"
},
"minItems": 1,
"description": "ISO 3166-1 alpha-2 codes of the countries whose search results the searches must return (the search engine's country setting, e.g. Google gl), e.g. [\"GB\",\"CA\"]. Different from exit_ip_countries.",
"uniqueItems": true
},
"exit_ip_countries": {
"type": "array",
"items": {
"type": "string",
"pattern": "^[A-Z]{2}$"
},
"minItems": 1,
"description": "ISO 3166-1 alpha-2 codes of countries the page requests must exit from, e.g. [\"US\",\"DE\"]. For search results of a country use search_countries.",
"uniqueItems": true
},
"min_pages_per_doc": {
"type": "integer",
"minimum": 1,
"description": "Pages one document may have at the most the plan allows, for document parsing. Met when the stated limit is at least this many (or the pages say there is no page limit); a plan whose pages do not state a limit is unknown. The limit of the largest way of sending (batch or asynchronous) counts."
},
"needs_diarization": {
"type": "boolean",
"description": "The plan must label who spoke (speaker diarization), for speech-to-text. Where the vendor charges extra for it, the extra price is added to the monthly cost; where the pages state no price or no inclusion the plan is unknown."
},
"needs_no_training": {
"type": "boolean",
"description": "An official page must say the vendor does not use the buyer's text, audio or documents to train its models without the buyer opting in. A use that is on by default with an opt-out to ask for does not count."
},
"session_recording": {
"type": "boolean",
"description": "The plan must record browser sessions (video or replay) that the buyer can watch afterwards."
},
"needs_dedicated_ip": {
"type": "boolean",
"description": "The plan must come with a dedicated sending IP address, for transactional email. A dedicated IP sold only as an add-on on top of the plan, or only on another plan, does not count."
},
"needs_official_mcp": {
"type": "boolean",
"description": "The provider must publish its own MCP server (hosted by it or run by the buyer), stated in its official documentation. A server only a third party published does not count."
},
"min_pages_per_crawl": {
"type": "integer",
"minimum": 1,
"description": "Pages one crawl job (from one start URL, following links) must be able to reach. A plan whose crawl has no page cap meets any number; give the size of the largest site to crawl. Different from the monthly page total."
},
"min_sending_domains": {
"type": "integer",
"minimum": 1,
"description": "Sending domains the plan must let one account authenticate, for transactional email. Met when the stated limit is at least this many (or the pages say it is unlimited); a plan whose pages do not state a limit is unknown."
},
"min_session_minutes": {
"type": "number",
"description": "Minutes one browser session must be able to run on this plan, for hosted browsers. Met when the stated longest session of the plan is at least this long; a plan whose pages do not state a session limit is unknown, and a limit the page gives only for another plan is not met.",
"exclusiveMinimum": 0
},
"needs_voice_cloning": {
"type": "boolean",
"description": "The plan must let the account clone a voice from its own recording, for text-to-speech. Cloning limited to eligible customers, a request form or an enterprise plan does not count for a plan that is not that plan."
},
"persistent_profiles": {
"type": "boolean",
"description": "The plan must keep browser profiles (login state, cookies) between sessions."
},
"search_result_types": {
"type": "array",
"items": {
"enum": [
"organic",
"ads",
"local_pack",
"knowledge_graph",
"people_also_ask",
"related_searches",
"shopping",
"news",
"images",
"videos",
"ai_overview"
],
"type": "string"
},
"minItems": 1,
"description": "Result types the parsed search response must contain: organic, ads, local_pack, knowledge_graph, people_also_ask, related_searches, shopping, news, images, videos, ai_overview.",
"uniqueItems": true
},
"max_monthly_cost_usd": {
"type": "number",
"minimum": 0,
"description": "Monthly budget in USD before tax. Compared with listed prices; annual plans use their per-month equivalent."
},
"needs_batch_discount": {
"type": "boolean",
"description": "An official page must say a batch or asynchronous way of sending documents costs less than the list price on the plan, for document parsing. The budget and the cost are judged at the list price, not at the batch price."
},
"needs_commercial_use": {
"type": "boolean",
"description": "The plan must allow commercial use of the generated audio, for text-to-speech. A free plan limited to non-commercial use does not count; a plan whose pages do not say is unknown."
},
"needs_no_min_billing": {
"type": "boolean",
"description": "An official page must say audio is billed by the second (or an increment of seconds) with no minimum billed duration per request, for speech-to-text. A page that says nothing about rounding is unknown."
},
"max_overage_usd_per_1k": {
"type": "number",
"minimum": 0,
"description": "The most the plan may charge for each 1,000 emails beyond its included volume, in USD, for transactional email. A plan whose extra price is not published as a per-1,000 figure is unknown."
},
"min_log_retention_days": {
"type": "integer",
"minimum": 1,
"description": "Days the plan must keep the logs or events of sent email where the account can read them, for transactional email. Longer retention sold as an add-on does not count."
},
"needs_table_extraction": {
"type": "boolean",
"description": "The service must return the tables of a page as structure (rows and cells), not only the text, for document parsing."
},
"search_returns_content": {
"type": "boolean",
"description": "The search response itself must carry the text of the result pages (extracted content), not only titles, links and snippets."
},
"min_requests_per_minute": {
"type": "number",
"description": "Minimum request rate the plan must allow, per minute.",
"exclusiveMinimum": 0
},
"realtime_search_required": {
"type": "boolean",
"description": "Search results must be returned in real time (not through a queue)."
},
"target_errors_not_billed": {
"type": "boolean",
"description": "Error responses from the target site (e.g. 404) must not be billed."
},
"needs_recurring_free_tier": {
"type": "boolean",
"description": "The plan must be usable every month without paying (a free plan with a monthly allowance or a monthly free credit)."
},
"failed_requests_not_billed": {
"type": "boolean",
"description": "Requests that fail on the provider side (timeouts, blocks, 5xx) must not be billed. A flat monthly price for unlimited requests meets it, since no request is billed on its own; when only success-based billing will do, use only_successful_requests_billed."
},
"only_successful_requests_billed": {
"type": "boolean",
"description": "Billing must count successful requests only: each successful request is charged (or draws credits) and failed ones cost nothing. A flat monthly price for unlimited requests does not meet it, since the price is the same whatever succeeds."
}
},
"description": "Nice-to-have conditions; they do not filter, they break ties.",
"additionalProperties": false
},
"needs_soc2": {
"enum": [
true,
false,
"II"
],
"type": [
"boolean",
"string"
],
"description": "The provider must hold a SOC 2 report: true for Type I or Type II, \"II\" for Type II."
},
"needs_batch": {
"type": "boolean",
"description": "The plan must transcribe recorded audio (a file or a stored recording), for speech-to-text. A plan priced for live audio only is not met."
},
"data_regions": {
"type": "array",
"items": {
"type": "string",
"maxLength": 20,
"minLength": 2
},
"minItems": 1,
"description": "Regions where data must be stored or processed, e.g. [\"EU\"]. Different from exit-IP countries.",
"uniqueItems": true
},
"needs_korean": {
"type": "boolean",
"description": "The service must voice Korean text (text-to-speech) or transcribe Korean speech (speech-to-text)."
},
"billing_types": {
"type": "array",
"items": {
"enum": [
"monthly_subscription",
"annual_subscription",
"pay_as_you_go",
"prepaid_credits"
],
"type": "string"
},
"minItems": 1,
"description": "Acceptable billing: monthly_subscription (A plan with a fixed fee (or minimum commitment) billed every month.) annual_subscription (A plan paid for a year at a time.) pay_as_you_go (No plan fee; a price per unit of use, billed after use or drawn from a balance topped up with any amount.) prepaid_credits (Money paid before use: a credit pack, a balance topped up first, or a plan amount charged in advance for the period.) Free plans always qualify.",
"uniqueItems": true
},
"monthly_pages": {
"type": "object",
"properties": {
"javascript": {
"type": "integer",
"minimum": 0
},
"plain_html": {
"type": "integer",
"minimum": 0
},
"premium_proxy": {
"type": "integer",
"minimum": 0
},
"javascript_premium_proxy": {
"type": "integer",
"minimum": 0
}
},
"description": "Pages per month by type: plain_html (static pages), javascript (needs rendering), premium_proxy (blocked sites that need residential/premium proxies), javascript_premium_proxy (both).",
"minProperties": 1,
"additionalProperties": false
},
"needs_inbound": {
"type": "boolean",
"description": "The service must receive email for the buyer and hand it on (inbound parsing, routes), for transactional email."
},
"product_types": {
"type": "array",
"items": {
"enum": [
"scraping_api",
"serp_api",
"headless_browser",
"platform",
"email_api",
"tts_api",
"stt_api",
"docparse_api"
],
"type": "string"
},
"minItems": 1,
"description": "Limit to these product types. Default: every type that can serve the workload.",
"uniqueItems": true
},
"search_engines": {
"type": "array",
"items": {
"enum": [
"google",
"bing",
"yahoo",
"yandex",
"baidu",
"duckduckgo",
"naver",
"brave"
],
"type": "string"
},
"minItems": 1,
"description": "Search engines whose results the plan must return, each at the plan's search price: google, bing, yahoo, yandex, baidu, duckduckgo, naver, brave (brave is Brave's own index). monthly_searches is the total over all of them.",
"uniqueItems": true
},
"captcha_solving": {
"type": "boolean",
"description": "The plan must solve CAPTCHAs for the browser sessions (the vendor does it, not the buyer own service)."
},
"min_concurrency": {
"type": "integer",
"minimum": 1,
"description": "Minimum number of concurrent requests (or browsers) the plan must allow."
},
"needs_streaming": {
"type": "boolean",
"description": "The service must return audio in real time as it is made (streaming or a WebSocket), for text-to-speech; for speech-to-text, it must transcribe live audio as it arrives. A speech-to-text price line is per mode, so a plan priced for recorded audio only is not met."
},
"monthly_searches": {
"type": "integer",
"minimum": 0,
"description": "Search requests per month (one results page each)."
},
"needs_remote_mcp": {
"type": "boolean",
"description": "The provider must host a remote MCP endpoint (a URL an MCP client connects to). An official server that can only be run on the buyer own machine does not meet it."
},
"proxies_included": {
"type": "boolean",
"description": "The plan must include proxy traffic of the vendor (some gigabytes in the plan fee). Proxy traffic sold only per gigabyte on top of the fee, or only on another plan, does not count."
},
"search_countries": {
"type": "array",
"items": {
"type": "string",
"pattern": "^[A-Z]{2}$"
},
"minItems": 1,
"description": "ISO 3166-1 alpha-2 codes of the countries whose search results the searches must return (the search engine's country setting, e.g. Google gl), e.g. [\"GB\",\"CA\"]. Different from exit_ip_countries.",
"uniqueItems": true
},
"exit_ip_countries": {
"type": "array",
"items": {
"type": "string",
"pattern": "^[A-Z]{2}$"
},
"minItems": 1,
"description": "ISO 3166-1 alpha-2 codes of countries the page requests must exit from, e.g. [\"US\",\"DE\"]. For search results of a country use search_countries.",
"uniqueItems": true
},
"min_pages_per_doc": {
"type": "integer",
"minimum": 1,
"description": "Pages one document may have at the most the plan allows, for document parsing. Met when the stated limit is at least this many (or the pages say there is no page limit); a plan whose pages do not state a limit is unknown. The limit of the largest way of sending (batch or asynchronous) counts."
},
"needs_diarization": {
"type": "boolean",
"description": "The plan must label who spoke (speaker diarization), for speech-to-text. Where the vendor charges extra for it, the extra price is added to the monthly cost; where the pages state no price or no inclusion the plan is unknown."
},
"needs_no_training": {
"type": "boolean",
"description": "An official page must say the vendor does not use the buyer's text, audio or documents to train its models without the buyer opting in. A use that is on by default with an opt-out to ask for does not count."
},
"session_recording": {
"type": "boolean",
"description": "The plan must record browser sessions (video or replay) that the buyer can watch afterwards."
},
"needs_dedicated_ip": {
"type": "boolean",
"description": "The plan must come with a dedicated sending IP address, for transactional email. A dedicated IP sold only as an add-on on top of the plan, or only on another plan, does not count."
},
"needs_official_mcp": {
"type": "boolean",
"description": "The provider must publish its own MCP server (hosted by it or run by the buyer), stated in its official documentation. A server only a third party published does not count."
},
"ai_extraction_pages": {
"type": "integer",
"minimum": 0,
"description": "How many of the pages need their fields extracted by an AI model (from a prompt or a schema, or automatically) without writing selectors. Each page counts in one of the two extraction fields."
},
"min_pages_per_crawl": {
"type": "integer",
"minimum": 1,
"description": "Pages one crawl job (from one start URL, following links) must be able to reach. A plan whose crawl has no page cap meets any number; give the size of the largest site to crawl. Different from the monthly page total."
},
"min_sending_domains": {
"type": "integer",
"minimum": 1,
"description": "Sending domains the plan must let one account authenticate, for transactional email. Met when the stated limit is at least this many (or the pages say it is unlimited); a plan whose pages do not state a limit is unknown."
},
"min_session_minutes": {
"type": "number",
"description": "Minutes one browser session must be able to run on this plan, for hosted browsers. Met when the stated longest session of the plan is at least this long; a plan whose pages do not state a session limit is unknown, and a limit the page gives only for another plan is not met.",
"exclusiveMinimum": 0
},
"monthly_pages_total": {
"type": "integer",
"minimum": 0,
"description": "Total pages per month when the split by type is not known yet. Costs and verdicts then cover every share of JavaScript-rendered pages from 0% to 100% of the total (no premium proxies), and the result lists monthly_pages under needs_input."
},
"needs_voice_cloning": {
"type": "boolean",
"description": "The plan must let the account clone a voice from its own recording, for text-to-speech. Cloning limited to eligible customers, a request form or an enterprise plan does not count for a plan that is not that plan."
},
"persistent_profiles": {
"type": "boolean",
"description": "The plan must keep browser profiles (login state, cookies) between sessions."
},
"search_result_types": {
"type": "array",
"items": {
"enum": [
"organic",
"ads",
"local_pack",
"knowledge_graph",
"people_also_ask",
"related_searches",
"shopping",
"news",
"images",
"videos",
"ai_overview"
],
"type": "string"
},
"minItems": 1,
"description": "Result types the parsed search response must contain: organic, ads, local_pack, knowledge_graph, people_also_ask, related_searches, shopping, news, images, videos, ai_overview.",
"uniqueItems": true
},
"max_monthly_cost_usd": {
"type": "number",
"minimum": 0,
"description": "Monthly budget in USD before tax. Compared with listed prices; annual plans use their per-month equivalent."
},
"needs_batch_discount": {
"type": "boolean",
"description": "An official page must say a batch or asynchronous way of sending documents costs less than the list price on the plan, for document parsing. The budget and the cost are judged at the list price, not at the batch price."
},
"needs_commercial_use": {
"type": "boolean",
"description": "The plan must allow commercial use of the generated audio, for text-to-speech. A free plan limited to non-commercial use does not count; a plan whose pages do not say is unknown."
},
"needs_no_min_billing": {
"type": "boolean",
"description": "An official page must say audio is billed by the second (or an increment of seconds) with no minimum billed duration per request, for speech-to-text. A page that says nothing about rounding is unknown."
},
"max_overage_usd_per_1k": {
"type": "number",
"minimum": 0,
"description": "The most the plan may charge for each 1,000 emails beyond its included volume, in USD, for transactional email. A plan whose extra price is not published as a per-1,000 figure is unknown."
},
"min_log_retention_days": {
"type": "integer",
"minimum": 1,
"description": "Days the plan must keep the logs or events of sent email where the account can read them, for transactional email. Longer retention sold as an add-on does not count."
},
"needs_table_extraction": {
"type": "boolean",
"description": "The service must return the tables of a page as structure (rows and cells), not only the text, for document parsing."
},
"search_returns_content": {
"type": "boolean",
"description": "The search response itself must carry the text of the result pages (extracted content), not only titles, links and snippets."
},
"min_requests_per_minute": {
"type": "number",
"description": "Minimum request rate the plan must allow, per minute.",
"exclusiveMinimum": 0
},
"browser_seconds_per_page": {
"type": "number",
"description": "Browser time per page in seconds, for headless-browser products billed by time. Every plan must then serve pages that take this long: a hosted browser does, a request-based API only when one request may run that long.",
"exclusiveMinimum": 0
},
"realtime_search_required": {
"type": "boolean",
"description": "Search results must be returned in real time (not through a queue)."
},
"target_errors_not_billed": {
"type": "boolean",
"description": "Error responses from the target site (e.g. 404) must not be billed."
},
"needs_recurring_free_tier": {
"type": "boolean",
"description": "The plan must be usable every month without paying (a free plan with a monthly allowance or a monthly free credit)."
},
"failed_requests_not_billed": {
"type": "boolean",
"description": "Requests that fail on the provider side (timeouts, blocks, 5xx) must not be billed. A flat monthly price for unlimited requests meets it, since no request is billed on its own; when only success-based billing will do, use only_successful_requests_billed."
},
"structured_extraction_pages": {
"type": "integer",
"minimum": 0,
"description": "How many of the pages must come back as JSON fields rather than HTML or text, by any method the plan offers (CSS or XPath selectors, a schema, or AI). When the fields must be found without writing selectors, use ai_extraction_pages instead; each page counts in one of the two."
},
"only_successful_requests_billed": {
"type": "boolean",
"description": "Billing must count successful requests only: each successful request is charged (or draws credits) and failed ones cost nothing. A flat monthly price for unlimited requests does not meet it, since the price is the same whatever succeeds."
}
},
"additionalProperties": false
}| needs_soc2 | boolean | string | The provider must hold a SOC 2 report: true for Type I or Type II, "II" for Type II. |
| negotiable | array | Conditions the user said can change: monthly_volume, concurrency, rate_limit, monthly_budget, billing_type, free_allowance, failed_request_billing, success_billing, target_error_billing, geo_targeting, data_region, serp_response_mode, serp_localization, serp_result_types, serp_engines, crawl_page_limit, mcp_official, mcp_remote, mcp_auth, zdr, soc2, search_content, min_session_minutes, proxies_included, captcha_solving, session_recording, persistent_profiles, dedicated_ip, sending_domains, log_retention_days, inbound_parse, overage_per_1k, commercial_use, voice_cloning, streaming, languages_ko, data_not_used_for_training, batch, diarization, no_min_billing, batch_discount, max_pages_per_doc, table_extraction. Default: every required condition, each marked ask_user because the user has not said it can change. |
| needs_batch | boolean | The plan must transcribe recorded audio (a file or a stored recording), for speech-to-text. A plan priced for live audio only is not met. |
| data_regions | array | Regions where data must be stored or processed, e.g. ["EU"]. Different from exit-IP countries. |
| needs_korean | boolean | The service must voice Korean text (text-to-speech) or transcribe Korean speech (speech-to-text). |
| billing_types | array | Acceptable billing: monthly_subscription (A plan with a fixed fee (or minimum commitment) billed every month.) annual_subscription (A plan paid for a year at a time.) pay_as_you_go (No plan fee; a price per unit of use, billed after use or drawn from a balance topped up with any amount.) prepaid_credits (Money paid before use: a credit pack, a balance topped up first, or a plan amount charged in advance for the period.) Free plans always qualify. |
| monthly_pages | object | Pages per month by type: plain_html (static pages), javascript (needs rendering), premium_proxy (blocked sites that need residential/premium proxies), javascript_premium_proxy (both). |
| needs_inbound | boolean | The service must receive email for the buyer and hand it on (inbound parsing, routes), for transactional email. |
| product_types | array | Limit to these product types. Default: every type that can serve the workload. |
| search_engines | array | Search engines whose results the plan must return, each at the plan's search price: google, bing, yahoo, yandex, baidu, duckduckgo, naver, brave (brave is Brave's own index). monthly_searches is the total over all of them. |
| captcha_solving | boolean | The plan must solve CAPTCHAs for the browser sessions (the vendor does it, not the buyer own service). |
| min_concurrency | integer | Minimum number of concurrent requests (or browsers) the plan must allow. |
| needs_streaming | boolean | The service must return audio in real time as it is made (streaming or a WebSocket), for text-to-speech; for speech-to-text, it must transcribe live audio as it arrives. A speech-to-text price line is per mode, so a plan priced for recorded audio only is not met. |
| monthly_searches | integer | Search requests per month (one results page each). |
| needs_remote_mcp | boolean | The provider must host a remote MCP endpoint (a URL an MCP client connects to). An official server that can only be run on the buyer own machine does not meet it. |
| proxies_included | boolean | The plan must include proxy traffic of the vendor (some gigabytes in the plan fee). Proxy traffic sold only per gigabyte on top of the fee, or only on another plan, does not count. |
| search_countries | array | ISO 3166-1 alpha-2 codes of the countries whose search results the searches must return (the search engine's country setting, e.g. Google gl), e.g. ["GB","CA"]. Different from exit_ip_countries. |
| exit_ip_countries | array | ISO 3166-1 alpha-2 codes of countries the page requests must exit from, e.g. ["US","DE"]. For search results of a country use search_countries. |
| min_pages_per_doc | integer | Pages one document may have at the most the plan allows, for document parsing. Met when the stated limit is at least this many (or the pages say there is no page limit); a plan whose pages do not state a limit is unknown. The limit of the largest way of sending (batch or asynchronous) counts. |
| needs_diarization | boolean | The plan must label who spoke (speaker diarization), for speech-to-text. Where the vendor charges extra for it, the extra price is added to the monthly cost; where the pages state no price or no inclusion the plan is unknown. |
| needs_no_training | boolean | An official page must say the vendor does not use the buyer's text, audio or documents to train its models without the buyer opting in. A use that is on by default with an opt-out to ask for does not count. |
| session_recording | boolean | The plan must record browser sessions (video or replay) that the buyer can watch afterwards. |
| needs_dedicated_ip | boolean | The plan must come with a dedicated sending IP address, for transactional email. A dedicated IP sold only as an add-on on top of the plan, or only on another plan, does not count. |
| needs_official_mcp | boolean | The provider must publish its own MCP server (hosted by it or run by the buyer), stated in its official documentation. A server only a third party published does not count. |
| ai_extraction_pages | integer | How many of the pages need their fields extracted by an AI model (from a prompt or a schema, or automatically) without writing selectors. Each page counts in one of the two extraction fields. |
| min_pages_per_crawl | integer | Pages one crawl job (from one start URL, following links) must be able to reach. A plan whose crawl has no page cap meets any number; give the size of the largest site to crawl. Different from the monthly page total. |
| min_sending_domains | integer | Sending domains the plan must let one account authenticate, for transactional email. Met when the stated limit is at least this many (or the pages say it is unlimited); a plan whose pages do not state a limit is unknown. |
| min_session_minutes | number | Minutes one browser session must be able to run on this plan, for hosted browsers. Met when the stated longest session of the plan is at least this long; a plan whose pages do not state a session limit is unknown, and a limit the page gives only for another plan is not met. |
| monthly_pages_total | integer | Total pages per month when the split by type is not known yet. Costs and verdicts then cover every share of JavaScript-rendered pages from 0% to 100% of the total (no premium proxies), and the result lists monthly_pages under needs_input. |
| needs_voice_cloning | boolean | The plan must let the account clone a voice from its own recording, for text-to-speech. Cloning limited to eligible customers, a request form or an enterprise plan does not count for a plan that is not that plan. |
| persistent_profiles | boolean | The plan must keep browser profiles (login state, cookies) between sessions. |
| search_result_types | array | Result types the parsed search response must contain: organic, ads, local_pack, knowledge_graph, people_also_ask, related_searches, shopping, news, images, videos, ai_overview. |
| max_monthly_cost_usd | number | Monthly budget in USD before tax. Compared with listed prices; annual plans use their per-month equivalent. |
| needs_batch_discount | boolean | An official page must say a batch or asynchronous way of sending documents costs less than the list price on the plan, for document parsing. The budget and the cost are judged at the list price, not at the batch price. |
| needs_commercial_use | boolean | The plan must allow commercial use of the generated audio, for text-to-speech. A free plan limited to non-commercial use does not count; a plan whose pages do not say is unknown. |
| needs_no_min_billing | boolean | An official page must say audio is billed by the second (or an increment of seconds) with no minimum billed duration per request, for speech-to-text. A page that says nothing about rounding is unknown. |
| max_overage_usd_per_1k | number | The most the plan may charge for each 1,000 emails beyond its included volume, in USD, for transactional email. A plan whose extra price is not published as a per-1,000 figure is unknown. |
| min_log_retention_days | integer | Days the plan must keep the logs or events of sent email where the account can read them, for transactional email. Longer retention sold as an add-on does not count. |
| needs_table_extraction | boolean | The service must return the tables of a page as structure (rows and cells), not only the text, for document parsing. |
| search_returns_content | boolean | The search response itself must carry the text of the result pages (extracted content), not only titles, links and snippets. |
| min_requests_per_minute | number | Minimum request rate the plan must allow, per minute. |
| browser_seconds_per_page | number | Browser time per page in seconds, for headless-browser products billed by time. Every plan must then serve pages that take this long: a hosted browser does, a request-based API only when one request may run that long. |
| realtime_search_required | boolean | Search results must be returned in real time (not through a queue). |
| target_errors_not_billed | boolean | Error responses from the target site (e.g. 404) must not be billed. |
| needs_recurring_free_tier | boolean | The plan must be usable every month without paying (a free plan with a monthly allowance or a monthly free credit). |
| failed_requests_not_billed | boolean | Requests that fail on the provider side (timeouts, blocks, 5xx) must not be billed. A flat monthly price for unlimited requests meets it, since no request is billed on its own; when only success-based billing will do, use only_successful_requests_billed. |
| structured_extraction_pages | integer | How many of the pages must come back as JSON fields rather than HTML or text, by any method the plan offers (CSS or XPath selectors, a schema, or AI). When the fields must be found without writing selectors, use ai_extraction_pages instead; each page counts in one of the two. |
| only_successful_requests_billed | boolean | Billing must count successful requests only: each successful request is charged (or draws credits) and failed ones cost nothing. A flat monthly price for unlimited requests does not meet it, since the price is the same whatever succeeds. |
{
"type": "object",
"properties": {
"limit": {
"type": "integer",
"default": 3,
"maximum": 20,
"minimum": 1,
"description": "Maximum plans listed for each change and under confirm_with_provider (default 3)."
},
"detail": {
"enum": [
"summary",
"full"
],
"type": "string",
"default": "summary",
"description": "summary returns one source sentence per fact; full returns every recorded fact and sentence."
},
"mcp_auth": {
"type": "array",
"items": {
"enum": [
"api_key",
"oauth"
],
"type": "string"
},
"minItems": 1,
"description": "Ways to authenticate to the provider's hosted MCP endpoint, any one of which will do: api_key, oauth. Met when the endpoint accepts at least one of them; implies a hosted endpoint.",
"uniqueItems": true
},
"needs_zdr": {
"type": "boolean",
"description": "Zero data retention must be usable on this plan. A provider that offers it only on a custom enterprise agreement does not meet it on its listed plans."
},
"preferred": {
"type": "object",
"properties": {
"mcp_auth": {
"type": "array",
"items": {
"enum": [
"api_key",
"oauth"
],
"type": "string"
},
"minItems": 1,
"description": "Ways to authenticate to the provider's hosted MCP endpoint, any one of which will do: api_key, oauth. Met when the endpoint accepts at least one of them; implies a hosted endpoint.",
"uniqueItems": true
},
"needs_zdr": {
"type": "boolean",
"description": "Zero data retention must be usable on this plan. A provider that offers it only on a custom enterprise agreement does not meet it on its listed plans."
},
"needs_soc2": {
"enum": [
true,
false,
"II"
],
"type": [
"boolean",
"string"
],
"description": "The provider must hold a SOC 2 report: true for Type I or Type II, \"II\" for Type II."
},
"needs_batch": {
"type": "boolean",
"description": "The plan must transcribe recorded audio (a file or a stored recording), for speech-to-text. A plan priced for live audio only is not met."
},
"data_regions": {
"type": "array",
"items": {
"type": "string",
"maxLength": 20,
"minLength": 2
},
"minItems": 1,
"description": "Regions where data must be stored or processed, e.g. [\"EU\"]. Different from exit-IP countries.",
"uniqueItems": true
},
"needs_korean": {
"type": "boolean",
"description": "The service must voice Korean text (text-to-speech) or transcribe Korean speech (speech-to-text)."
},
"billing_types": {
"type": "array",
"items": {
"enum": [
"monthly_subscription",
"annual_subscription",
"pay_as_you_go",
"prepaid_credits"
],
"type": "string"
},
"minItems": 1,
"description": "Acceptable billing: monthly_subscription (A plan with a fixed fee (or minimum commitment) billed every month.) annual_subscription (A plan paid for a year at a time.) pay_as_you_go (No plan fee; a price per unit of use, billed after use or drawn from a balance topped up with any amount.) prepaid_credits (Money paid before use: a credit pack, a balance topped up first, or a plan amount charged in advance for the period.) Free plans always qualify.",
"uniqueItems": true
},
"needs_inbound": {
"type": "boolean",
"description": "The service must receive email for the buyer and hand it on (inbound parsing, routes), for transactional email."
},
"search_engines": {
"type": "array",
"items": {
"enum": [
"google",
"bing",
"yahoo",
"yandex",
"baidu",
"duckduckgo",
"naver",
"brave"
],
"type": "string"
},
"minItems": 1,
"description": "Search engines whose results the plan must return, each at the plan's search price: google, bing, yahoo, yandex, baidu, duckduckgo, naver, brave (brave is Brave's own index). monthly_searches is the total over all of them.",
"uniqueItems": true
},
"captcha_solving": {
"type": "boolean",
"description": "The plan must solve CAPTCHAs for the browser sessions (the vendor does it, not the buyer own service)."
},
"min_concurrency": {
"type": "integer",
"minimum": 1,
"description": "Minimum number of concurrent requests (or browsers) the plan must allow."
},
"needs_streaming": {
"type": "boolean",
"description": "The service must return audio in real time as it is made (streaming or a WebSocket), for text-to-speech; for speech-to-text, it must transcribe live audio as it arrives. A speech-to-text price line is per mode, so a plan priced for recorded audio only is not met."
},
"needs_remote_mcp": {
"type": "boolean",
"description": "The provider must host a remote MCP endpoint (a URL an MCP client connects to). An official server that can only be run on the buyer own machine does not meet it."
},
"proxies_included": {
"type": "boolean",
"description": "The plan must include proxy traffic of the vendor (some gigabytes in the plan fee). Proxy traffic sold only per gigabyte on top of the fee, or only on another plan, does not count."
},
"search_countries": {
"type": "array",
"items": {
"type": "string",
"pattern": "^[A-Z]{2}$"
},
"minItems": 1,
"description": "ISO 3166-1 alpha-2 codes of the countries whose search results the searches must return (the search engine's country setting, e.g. Google gl), e.g. [\"GB\",\"CA\"]. Different from exit_ip_countries.",
"uniqueItems": true
},
"exit_ip_countries": {
"type": "array",
"items": {
"type": "string",
"pattern": "^[A-Z]{2}$"
},
"minItems": 1,
"description": "ISO 3166-1 alpha-2 codes of countries the page requests must exit from, e.g. [\"US\",\"DE\"]. For search results of a country use search_countries.",
"uniqueItems": true
},
"min_pages_per_doc": {
"type": "integer",
"minimum": 1,
"description": "Pages one document may have at the most the plan allows, for document parsing. Met when the stated limit is at least this many (or the pages say there is no page limit); a plan whose pages do not state a limit is unknown. The limit of the largest way of sending (batch or asynchronous) counts."
},
"needs_diarization": {
"type": "boolean",
"description": "The plan must label who spoke (speaker diarization), for speech-to-text. Where the vendor charges extra for it, the extra price is added to the monthly cost; where the pages state no price or no inclusion the plan is unknown."
},
"needs_no_training": {
"type": "boolean",
"description": "An official page must say the vendor does not use the buyer's text, audio or documents to train its models without the buyer opting in. A use that is on by default with an opt-out to ask for does not count."
},
"session_recording": {
"type": "boolean",
"description": "The plan must record browser sessions (video or replay) that the buyer can watch afterwards."
},
"needs_dedicated_ip": {
"type": "boolean",
"description": "The plan must come with a dedicated sending IP address, for transactional email. A dedicated IP sold only as an add-on on top of the plan, or only on another plan, does not count."
},
"needs_official_mcp": {
"type": "boolean",
"description": "The provider must publish its own MCP server (hosted by it or run by the buyer), stated in its official documentation. A server only a third party published does not count."
},
"min_pages_per_crawl": {
"type": "integer",
"minimum": 1,
"description": "Pages one crawl job (from one start URL, following links) must be able to reach. A plan whose crawl has no page cap meets any number; give the size of the largest site to crawl. Different from the monthly page total."
},
"min_sending_domains": {
"type": "integer",
"minimum": 1,
"description": "Sending domains the plan must let one account authenticate, for transactional email. Met when the stated limit is at least this many (or the pages say it is unlimited); a plan whose pages do not state a limit is unknown."
},
"min_session_minutes": {
"type": "number",
"description": "Minutes one browser session must be able to run on this plan, for hosted browsers. Met when the stated longest session of the plan is at least this long; a plan whose pages do not state a session limit is unknown, and a limit the page gives only for another plan is not met.",
"exclusiveMinimum": 0
},
"needs_voice_cloning": {
"type": "boolean",
"description": "The plan must let the account clone a voice from its own recording, for text-to-speech. Cloning limited to eligible customers, a request form or an enterprise plan does not count for a plan that is not that plan."
},
"persistent_profiles": {
"type": "boolean",
"description": "The plan must keep browser profiles (login state, cookies) between sessions."
},
"search_result_types": {
"type": "array",
"items": {
"enum": [
"organic",
"ads",
"local_pack",
"knowledge_graph",
"people_also_ask",
"related_searches",
"shopping",
"news",
"images",
"videos",
"ai_overview"
],
"type": "string"
},
"minItems": 1,
"description": "Result types the parsed search response must contain: organic, ads, local_pack, knowledge_graph, people_also_ask, related_searches, shopping, news, images, videos, ai_overview.",
"uniqueItems": true
},
"max_monthly_cost_usd": {
"type": "number",
"minimum": 0,
"description": "Monthly budget in USD before tax. Compared with listed prices; annual plans use their per-month equivalent."
},
"needs_batch_discount": {
"type": "boolean",
"description": "An official page must say a batch or asynchronous way of sending documents costs less than the list price on the plan, for document parsing. The budget and the cost are judged at the list price, not at the batch price."
},
"needs_commercial_use": {
"type": "boolean",
"description": "The plan must allow commercial use of the generated audio, for text-to-speech. A free plan limited to non-commercial use does not count; a plan whose pages do not say is unknown."
},
"needs_no_min_billing": {
"type": "boolean",
"description": "An official page must say audio is billed by the second (or an increment of seconds) with no minimum billed duration per request, for speech-to-text. A page that says nothing about rounding is unknown."
},
"max_overage_usd_per_1k": {
"type": "number",
"minimum": 0,
"description": "The most the plan may charge for each 1,000 emails beyond its included volume, in USD, for transactional email. A plan whose extra price is not published as a per-1,000 figure is unknown."
},
"min_log_retention_days": {
"type": "integer",
"minimum": 1,
"description": "Days the plan must keep the logs or events of sent email where the account can read them, for transactional email. Longer retention sold as an add-on does not count."
},
"needs_table_extraction": {
"type": "boolean",
"description": "The service must return the tables of a page as structure (rows and cells), not only the text, for document parsing."
},
"search_returns_content": {
"type": "boolean",
"description": "The search response itself must carry the text of the result pages (extracted content), not only titles, links and snippets."
},
"min_requests_per_minute": {
"type": "number",
"description": "Minimum request rate the plan must allow, per minute.",
"exclusiveMinimum": 0
},
"realtime_search_required": {
"type": "boolean",
"description": "Search results must be returned in real time (not through a queue)."
},
"target_errors_not_billed": {
"type": "boolean",
"description": "Error responses from the target site (e.g. 404) must not be billed."
},
"needs_recurring_free_tier": {
"type": "boolean",
"description": "The plan must be usable every month without paying (a free plan with a monthly allowance or a monthly free credit)."
},
"failed_requests_not_billed": {
"type": "boolean",
"description": "Requests that fail on the provider side (timeouts, blocks, 5xx) must not be billed. A flat monthly price for unlimited requests meets it, since no request is billed on its own; when only success-based billing will do, use only_successful_requests_billed."
},
"only_successful_requests_billed": {
"type": "boolean",
"description": "Billing must count successful requests only: each successful request is charged (or draws credits) and failed ones cost nothing. A flat monthly price for unlimited requests does not meet it, since the price is the same whatever succeeds."
}
},
"description": "Nice-to-have conditions; they do not filter, they break ties.",
"additionalProperties": false
},
"needs_soc2": {
"enum": [
true,
false,
"II"
],
"type": [
"boolean",
"string"
],
"description": "The provider must hold a SOC 2 report: true for Type I or Type II, \"II\" for Type II."
},
"negotiable": {
"type": "array",
"items": {
"enum": [
"monthly_volume",
"concurrency",
"rate_limit",
"monthly_budget",
"billing_type",
"free_allowance",
"failed_request_billing",
"success_billing",
"target_error_billing",
"geo_targeting",
"data_region",
"serp_response_mode",
"serp_localization",
"serp_result_types",
"serp_engines",
"crawl_page_limit",
"mcp_official",
"mcp_remote",
"mcp_auth",
"zdr",
"soc2",
"search_content",
"min_session_minutes",
"proxies_included",
"captcha_solving",
"session_recording",
"persistent_profiles",
"dedicated_ip",
"sending_domains",
"log_retention_days",
"inbound_parse",
"overage_per_1k",
"commercial_use",
"voice_cloning",
"streaming",
"languages_ko",
"data_not_used_for_training",
"batch",
"diarization",
"no_min_billing",
"batch_discount",
"max_pages_per_doc",
"table_extraction"
],
"type": "string"
},
"minItems": 1,
"description": "Conditions the user said can change: monthly_volume, concurrency, rate_limit, monthly_budget, billing_type, free_allowance, failed_request_billing, success_billing, target_error_billing, geo_targeting, data_region, serp_response_mode, serp_localization, serp_result_types, serp_engines, crawl_page_limit, mcp_official, mcp_remote, mcp_auth, zdr, soc2, search_content, min_session_minutes, proxies_included, captcha_solving, session_recording, persistent_profiles, dedicated_ip, sending_domains, log_retention_days, inbound_parse, overage_per_1k, commercial_use, voice_cloning, streaming, languages_ko, data_not_used_for_training, batch, diarization, no_min_billing, batch_discount, max_pages_per_doc, table_extraction. Default: every required condition, each marked ask_user because the user has not said it can change.",
"uniqueItems": true
},
"needs_batch": {
"type": "boolean",
"description": "The plan must transcribe recorded audio (a file or a stored recording), for speech-to-text. A plan priced for live audio only is not met."
},
"data_regions": {
"type": "array",
"items": {
"type": "string",
"maxLength": 20,
"minLength": 2
},
"minItems": 1,
"description": "Regions where data must be stored or processed, e.g. [\"EU\"]. Different from exit-IP countries.",
"uniqueItems": true
},
"needs_korean": {
"type": "boolean",
"description": "The service must voice Korean text (text-to-speech) or transcribe Korean speech (speech-to-text)."
},
"billing_types": {
"type": "array",
"items": {
"enum": [
"monthly_subscription",
"annual_subscription",
"pay_as_you_go",
"prepaid_credits"
],
"type": "string"
},
"minItems": 1,
"description": "Acceptable billing: monthly_subscription (A plan with a fixed fee (or minimum commitment) billed every month.) annual_subscription (A plan paid for a year at a time.) pay_as_you_go (No plan fee; a price per unit of use, billed after use or drawn from a balance topped up with any amount.) prepaid_credits (Money paid before use: a credit pack, a balance topped up first, or a plan amount charged in advance for the period.) Free plans always qualify.",
"uniqueItems": true
},
"monthly_pages": {
"type": "object",
"properties": {
"javascript": {
"type": "integer",
"minimum": 0
},
"plain_html": {
"type": "integer",
"minimum": 0
},
"premium_proxy": {
"type": "integer",
"minimum": 0
},
"javascript_premium_proxy": {
"type": "integer",
"minimum": 0
}
},
"description": "Pages per month by type: plain_html (static pages), javascript (needs rendering), premium_proxy (blocked sites that need residential/premium proxies), javascript_premium_proxy (both).",
"minProperties": 1,
"additionalProperties": false
},
"needs_inbound": {
"type": "boolean",
"description": "The service must receive email for the buyer and hand it on (inbound parsing, routes), for transactional email."
},
"product_types": {
"type": "array",
"items": {
"enum": [
"scraping_api",
"serp_api",
"headless_browser",
"platform",
"email_api",
"tts_api",
"stt_api",
"docparse_api"
],
"type": "string"
},
"minItems": 1,
"description": "Limit to these product types. Default: every type that can serve the workload.",
"uniqueItems": true
},
"search_engines": {
"type": "array",
"items": {
"enum": [
"google",
"bing",
"yahoo",
"yandex",
"baidu",
"duckduckgo",
"naver",
"brave"
],
"type": "string"
},
"minItems": 1,
"description": "Search engines whose results the plan must return, each at the plan's search price: google, bing, yahoo, yandex, baidu, duckduckgo, naver, brave (brave is Brave's own index). monthly_searches is the total over all of them.",
"uniqueItems": true
},
"captcha_solving": {
"type": "boolean",
"description": "The plan must solve CAPTCHAs for the browser sessions (the vendor does it, not the buyer own service)."
},
"min_concurrency": {
"type": "integer",
"minimum": 1,
"description": "Minimum number of concurrent requests (or browsers) the plan must allow."
},
"needs_streaming": {
"type": "boolean",
"description": "The service must return audio in real time as it is made (streaming or a WebSocket), for text-to-speech; for speech-to-text, it must transcribe live audio as it arrives. A speech-to-text price line is per mode, so a plan priced for recorded audio only is not met."
},
"monthly_searches": {
"type": "integer",
"minimum": 0,
"description": "Search requests per month (one results page each)."
},
"needs_remote_mcp": {
"type": "boolean",
"description": "The provider must host a remote MCP endpoint (a URL an MCP client connects to). An official server that can only be run on the buyer own machine does not meet it."
},
"proxies_included": {
"type": "boolean",
"description": "The plan must include proxy traffic of the vendor (some gigabytes in the plan fee). Proxy traffic sold only per gigabyte on top of the fee, or only on another plan, does not count."
},
"search_countries": {
"type": "array",
"items": {
"type": "string",
"pattern": "^[A-Z]{2}$"
},
"minItems": 1,
"description": "ISO 3166-1 alpha-2 codes of the countries whose search results the searches must return (the search engine's country setting, e.g. Google gl), e.g. [\"GB\",\"CA\"]. Different from exit_ip_countries.",
"uniqueItems": true
},
"exit_ip_countries": {
"type": "array",
"items": {
"type": "string",
"pattern": "^[A-Z]{2}$"
},
"minItems": 1,
"description": "ISO 3166-1 alpha-2 codes of countries the page requests must exit from, e.g. [\"US\",\"DE\"]. For search results of a country use search_countries.",
"uniqueItems": true
},
"min_pages_per_doc": {
"type": "integer",
"minimum": 1,
"description": "Pages one document may have at the most the plan allows, for document parsing. Met when the stated limit is at least this many (or the pages say there is no page limit); a plan whose pages do not state a limit is unknown. The limit of the largest way of sending (batch or asynchronous) counts."
},
"needs_diarization": {
"type": "boolean",
"description": "The plan must label who spoke (speaker diarization), for speech-to-text. Where the vendor charges extra for it, the extra price is added to the monthly cost; where the pages state no price or no inclusion the plan is unknown."
},
"needs_no_training": {
"type": "boolean",
"description": "An official page must say the vendor does not use the buyer's text, audio or documents to train its models without the buyer opting in. A use that is on by default with an opt-out to ask for does not count."
},
"session_recording": {
"type": "boolean",
"description": "The plan must record browser sessions (video or replay) that the buyer can watch afterwards."
},
"needs_dedicated_ip": {
"type": "boolean",
"description": "The plan must come with a dedicated sending IP address, for transactional email. A dedicated IP sold only as an add-on on top of the plan, or only on another plan, does not count."
},
"needs_official_mcp": {
"type": "boolean",
"description": "The provider must publish its own MCP server (hosted by it or run by the buyer), stated in its official documentation. A server only a third party published does not count."
},
"ai_extraction_pages": {
"type": "integer",
"minimum": 0,
"description": "How many of the pages need their fields extracted by an AI model (from a prompt or a schema, or automatically) without writing selectors. Each page counts in one of the two extraction fields."
},
"min_pages_per_crawl": {
"type": "integer",
"minimum": 1,
"description": "Pages one crawl job (from one start URL, following links) must be able to reach. A plan whose crawl has no page cap meets any number; give the size of the largest site to crawl. Different from the monthly page total."
},
"min_sending_domains": {
"type": "integer",
"minimum": 1,
"description": "Sending domains the plan must let one account authenticate, for transactional email. Met when the stated limit is at least this many (or the pages say it is unlimited); a plan whose pages do not state a limit is unknown."
},
"min_session_minutes": {
"type": "number",
"description": "Minutes one browser session must be able to run on this plan, for hosted browsers. Met when the stated longest session of the plan is at least this long; a plan whose pages do not state a session limit is unknown, and a limit the page gives only for another plan is not met.",
"exclusiveMinimum": 0
},
"monthly_pages_total": {
"type": "integer",
"minimum": 0,
"description": "Total pages per month when the split by type is not known yet. Costs and verdicts then cover every share of JavaScript-rendered pages from 0% to 100% of the total (no premium proxies), and the result lists monthly_pages under needs_input."
},
"needs_voice_cloning": {
"type": "boolean",
"description": "The plan must let the account clone a voice from its own recording, for text-to-speech. Cloning limited to eligible customers, a request form or an enterprise plan does not count for a plan that is not that plan."
},
"persistent_profiles": {
"type": "boolean",
"description": "The plan must keep browser profiles (login state, cookies) between sessions."
},
"search_result_types": {
"type": "array",
"items": {
"enum": [
"organic",
"ads",
"local_pack",
"knowledge_graph",
"people_also_ask",
"related_searches",
"shopping",
"news",
"images",
"videos",
"ai_overview"
],
"type": "string"
},
"minItems": 1,
"description": "Result types the parsed search response must contain: organic, ads, local_pack, knowledge_graph, people_also_ask, related_searches, shopping, news, images, videos, ai_overview.",
"uniqueItems": true
},
"max_monthly_cost_usd": {
"type": "number",
"minimum": 0,
"description": "Monthly budget in USD before tax. Compared with listed prices; annual plans use their per-month equivalent."
},
"needs_batch_discount": {
"type": "boolean",
"description": "An official page must say a batch or asynchronous way of sending documents costs less than the list price on the plan, for document parsing. The budget and the cost are judged at the list price, not at the batch price."
},
"needs_commercial_use": {
"type": "boolean",
"description": "The plan must allow commercial use of the generated audio, for text-to-speech. A free plan limited to non-commercial use does not count; a plan whose pages do not say is unknown."
},
"needs_no_min_billing": {
"type": "boolean",
"description": "An official page must say audio is billed by the second (or an increment of seconds) with no minimum billed duration per request, for speech-to-text. A page that says nothing about rounding is unknown."
},
"max_overage_usd_per_1k": {
"type": "number",
"minimum": 0,
"description": "The most the plan may charge for each 1,000 emails beyond its included volume, in USD, for transactional email. A plan whose extra price is not published as a per-1,000 figure is unknown."
},
"min_log_retention_days": {
"type": "integer",
"minimum": 1,
"description": "Days the plan must keep the logs or events of sent email where the account can read them, for transactional email. Longer retention sold as an add-on does not count."
},
"needs_table_extraction": {
"type": "boolean",
"description": "The service must return the tables of a page as structure (rows and cells), not only the text, for document parsing."
},
"search_returns_content": {
"type": "boolean",
"description": "The search response itself must carry the text of the result pages (extracted content), not only titles, links and snippets."
},
"min_requests_per_minute": {
"type": "number",
"description": "Minimum request rate the plan must allow, per minute.",
"exclusiveMinimum": 0
},
"browser_seconds_per_page": {
"type": "number",
"description": "Browser time per page in seconds, for headless-browser products billed by time. Every plan must then serve pages that take this long: a hosted browser does, a request-based API only when one request may run that long.",
"exclusiveMinimum": 0
},
"realtime_search_required": {
"type": "boolean",
"description": "Search results must be returned in real time (not through a queue)."
},
"target_errors_not_billed": {
"type": "boolean",
"description": "Error responses from the target site (e.g. 404) must not be billed."
},
"needs_recurring_free_tier": {
"type": "boolean",
"description": "The plan must be usable every month without paying (a free plan with a monthly allowance or a monthly free credit)."
},
"failed_requests_not_billed": {
"type": "boolean",
"description": "Requests that fail on the provider side (timeouts, blocks, 5xx) must not be billed. A flat monthly price for unlimited requests meets it, since no request is billed on its own; when only success-based billing will do, use only_successful_requests_billed."
},
"structured_extraction_pages": {
"type": "integer",
"minimum": 0,
"description": "How many of the pages must come back as JSON fields rather than HTML or text, by any method the plan offers (CSS or XPath selectors, a schema, or AI). When the fields must be found without writing selectors, use ai_extraction_pages instead; each page counts in one of the two."
},
"only_successful_requests_billed": {
"type": "boolean",
"description": "Billing must count successful requests only: each successful request is charged (or draws credits) and failed ones cost nothing. A flat monthly price for unlimited requests does not meet it, since the price is the same whatever succeeds."
}
},
"additionalProperties": false
}| Argument | Type | Description |
|---|---|---|
| limit | integer | Maximum plans returned in each list (default and maximum 5). |
| detail | string | summary returns one source sentence per fact; full returns every recorded fact and sentence. |
| format | string | brief returns, per plan, the plan, provider, whether it meets all, the monthly cost and the requested conditions only, each with its verdict, a one-line reason, one source sentence and its source (about a quarter of the full size); the verdicts and costs are those of full. Call it right before choosing or buying a plan. |
| mcp_auth | array | Ways to authenticate to the provider's hosted MCP endpoint, any one of which will do: api_key, oauth. Met when the endpoint accepts at least one of them; implies a hosted endpoint. |
| needs_zdr | boolean | Zero data retention must be usable on this plan. A provider that offers it only on a custom enterprise agreement does not meet it on its listed plans. |
| preferred | object | Nice-to-have conditions; they do not filter, they break ties. |
| providers | array | Judge only the plans of these providers (candidates you already have, for example from a web search). Give provider ids or names as listed, such as "tavily", "Brave Search API" or "You.com"; case does not matter. Names that are not providers here are listed under unknown_providers in the result. |
| needs_soc2 | boolean | string | The provider must hold a SOC 2 report: true for Type I or Type II, "II" for Type II. |
| needs_batch | boolean | The plan must transcribe recorded audio (a file or a stored recording), for speech-to-text. A plan priced for live audio only is not met. |
| data_regions | array | Regions where data must be stored or processed, e.g. ["EU"]. Different from exit-IP countries. |
| needs_korean | boolean | The service must voice Korean text (text-to-speech) or transcribe Korean speech (speech-to-text). |
| billing_types | array | Acceptable billing: monthly_subscription (A plan with a fixed fee (or minimum commitment) billed every month.) annual_subscription (A plan paid for a year at a time.) pay_as_you_go (No plan fee; a price per unit of use, billed after use or drawn from a balance topped up with any amount.) prepaid_credits (Money paid before use: a credit pack, a balance topped up first, or a plan amount charged in advance for the period.) Free plans always qualify. |
| monthly_pages | object | Pages per month by type: plain_html (static pages), javascript (needs rendering), premium_proxy (blocked sites that need residential/premium proxies), javascript_premium_proxy (both). |
| needs_inbound | boolean | The service must receive email for the buyer and hand it on (inbound parsing, routes), for transactional email. |
| product_types | array | Limit to these product types. Default: every type that can serve the workload. |
| monthly_emails | number | Emails sent per month, for transactional email APIs (SendGrid, Mailgun, Postmark, Resend, Amazon SES, Brevo, Mailtrap, Loops). It is the whole workload: give it instead of monthly_pages, monthly_searches and monthly_browser_hours, not with them. Only email products can serve it; other products are out of scope. |
| search_engines | array | Search engines whose results the plan must return, each at the plan's search price: google, bing, yahoo, yandex, baidu, duckduckgo, naver, brave (brave is Brave's own index). monthly_searches is the total over all of them. |
| captcha_solving | boolean | The plan must solve CAPTCHAs for the browser sessions (the vendor does it, not the buyer own service). |
| min_concurrency | integer | Minimum number of concurrent requests (or browsers) the plan must allow. |
| needs_streaming | boolean | The service must return audio in real time as it is made (streaming or a WebSocket), for text-to-speech; for speech-to-text, it must transcribe live audio as it arrives. A speech-to-text price line is per mode, so a plan priced for recorded audio only is not met. |
| monthly_searches | integer | Search requests per month (one results page each). |
| needs_remote_mcp | boolean | The provider must host a remote MCP endpoint (a URL an MCP client connects to). An official server that can only be run on the buyer own machine does not meet it. |
| proxies_included | boolean | The plan must include proxy traffic of the vendor (some gigabytes in the plan fee). Proxy traffic sold only per gigabyte on top of the fee, or only on another plan, does not count. |
| search_countries | array | ISO 3166-1 alpha-2 codes of the countries whose search results the searches must return (the search engine's country setting, e.g. Google gl), e.g. ["GB","CA"]. Different from exit_ip_countries. |
| exit_ip_countries | array | ISO 3166-1 alpha-2 codes of countries the page requests must exit from, e.g. ["US","DE"]. For search results of a country use search_countries. |
| min_pages_per_doc | integer | Pages one document may have at the most the plan allows, for document parsing. Met when the stated limit is at least this many (or the pages say there is no page limit); a plan whose pages do not state a limit is unknown. The limit of the largest way of sending (batch or asynchronous) counts. |
| needs_diarization | boolean | The plan must label who spoke (speaker diarization), for speech-to-text. Where the vendor charges extra for it, the extra price is added to the monthly cost; where the pages state no price or no inclusion the plan is unknown. |
| needs_no_training | boolean | An official page must say the vendor does not use the buyer's text, audio or documents to train its models without the buyer opting in. A use that is on by default with an opt-out to ask for does not count. |
| session_recording | boolean | The plan must record browser sessions (video or replay) that the buyer can watch afterwards. |
| monthly_characters | number | Characters of text voiced per month, for text-to-speech APIs (ElevenLabs, Cartesia, Deepgram Aura, OpenAI, Google Cloud, Amazon Polly, Azure, Gradium, Rime, Inworld, MiniMax, Murf, Hume). It is the whole workload: give it instead of monthly_pages, monthly_searches, monthly_browser_hours and monthly_emails, not with them. Only text-to-speech products can serve it; other products are out of scope. |
| needs_dedicated_ip | boolean | The plan must come with a dedicated sending IP address, for transactional email. A dedicated IP sold only as an add-on on top of the plan, or only on another plan, does not count. |
| needs_official_mcp | boolean | The provider must publish its own MCP server (hosted by it or run by the buyer), stated in its official documentation. A server only a third party published does not count. |
| ai_extraction_pages | integer | How many of the pages need their fields extracted by an AI model (from a prompt or a schema, or automatically) without writing selectors. Each page counts in one of the two extraction fields. |
| min_pages_per_crawl | integer | Pages one crawl job (from one start URL, following links) must be able to reach. A plan whose crawl has no page cap meets any number; give the size of the largest site to crawl. Different from the monthly page total. |
| min_sending_domains | integer | Sending domains the plan must let one account authenticate, for transactional email. Met when the stated limit is at least this many (or the pages say it is unlimited); a plan whose pages do not state a limit is unknown. |
| min_session_minutes | number | Minutes one browser session must be able to run on this plan, for hosted browsers. Met when the stated longest session of the plan is at least this long; a plan whose pages do not state a session limit is unknown, and a limit the page gives only for another plan is not met. |
| monthly_audio_hours | number | Hours of audio transcribed per month, for speech-to-text APIs (Deepgram, AssemblyAI, Speechmatics, Amazon Transcribe, Google Cloud, OpenAI). A price given per minute is multiplied by 60. It is the whole workload: give it instead of monthly_pages, monthly_searches, monthly_browser_hours, monthly_emails and monthly_characters, not with them. Only speech-to-text products can serve it; other products are out of scope. |
| monthly_pages_total | integer | Total pages per month when the split by type is not known yet. Costs and verdicts then cover every share of JavaScript-rendered pages from 0% to 100% of the total (no premium proxies), and the result lists monthly_pages under needs_input. |
| needs_voice_cloning | boolean | The plan must let the account clone a voice from its own recording, for text-to-speech. Cloning limited to eligible customers, a request form or an enterprise plan does not count for a plan that is not that plan. |
| persistent_profiles | boolean | The plan must keep browser profiles (login state, cookies) between sessions. |
| search_result_types | array | Result types the parsed search response must contain: organic, ads, local_pack, knowledge_graph, people_also_ask, related_searches, shopping, news, images, videos, ai_overview. |
| max_monthly_cost_usd | number | Monthly budget in USD before tax. Compared with listed prices; annual plans use their per-month equivalent. |
| needs_batch_discount | boolean | An official page must say a batch or asynchronous way of sending documents costs less than the list price on the plan, for document parsing. The budget and the cost are judged at the list price, not at the batch price. |
| needs_commercial_use | boolean | The plan must allow commercial use of the generated audio, for text-to-speech. A free plan limited to non-commercial use does not count; a plan whose pages do not say is unknown. |
| needs_no_min_billing | boolean | An official page must say audio is billed by the second (or an increment of seconds) with no minimum billed duration per request, for speech-to-text. A page that says nothing about rounding is unknown. |
| monthly_browser_hours | number | Browser time per month in hours, for hosted browsers (Browserbase, Browserless) billed by browser time. It is the whole workload: give it instead of monthly_pages, monthly_searches and browser_seconds_per_page, not with them. Only browser products can serve it; other products are out of scope. |
| max_overage_usd_per_1k | number | The most the plan may charge for each 1,000 emails beyond its included volume, in USD, for transactional email. A plan whose extra price is not published as a per-1,000 figure is unknown. |
| min_log_retention_days | integer | Days the plan must keep the logs or events of sent email where the account can read them, for transactional email. Longer retention sold as an add-on does not count. |
| monthly_document_pages | number | Pages of documents parsed per month, for document-parsing APIs (LlamaParse, Reducto, Unstructured, Mistral OCR, LandingAI, Amazon Textract, Google Document AI, Azure Document Intelligence, Datalab, Mathpix, Mindee, Nanonets, Upstage). A price given per credit is multiplied by the credits one page costs. It is the whole workload: give it instead of monthly_pages, monthly_searches, monthly_browser_hours, monthly_emails, monthly_characters and monthly_audio_hours, not with them. Only document-parsing products can serve it; other products are out of scope. |
| needs_table_extraction | boolean | The service must return the tables of a page as structure (rows and cells), not only the text, for document parsing. |
| search_returns_content | boolean | The search response itself must carry the text of the result pages (extracted content), not only titles, links and snippets. |
| min_requests_per_minute | number | Minimum request rate the plan must allow, per minute. |
| browser_seconds_per_page | number | Browser time per page in seconds, for headless-browser products billed by time. Every plan must then serve pages that take this long: a hosted browser does, a request-based API only when one request may run that long. |
| realtime_search_required | boolean | Search results must be returned in real time (not through a queue). |
| target_errors_not_billed | boolean | Error responses from the target site (e.g. 404) must not be billed. |
| needs_recurring_free_tier | boolean | The plan must be usable every month without paying (a free plan with a monthly allowance or a monthly free credit). |
| failed_requests_not_billed | boolean | Requests that fail on the provider side (timeouts, blocks, 5xx) must not be billed. A flat monthly price for unlimited requests meets it, since no request is billed on its own; when only success-based billing will do, use only_successful_requests_billed. |
| structured_extraction_pages | integer | How many of the pages must come back as JSON fields rather than HTML or text, by any method the plan offers (CSS or XPath selectors, a schema, or AI). When the fields must be found without writing selectors, use ai_extraction_pages instead; each page counts in one of the two. |
| only_successful_requests_billed | boolean | Billing must count successful requests only: each successful request is charged (or draws credits) and failed ones cost nothing. A flat monthly price for unlimited requests does not meet it, since the price is the same whatever succeeds. |
{
"type": "object",
"properties": {
"limit": {
"type": "integer",
"default": 5,
"maximum": 5,
"minimum": 1,
"description": "Maximum plans returned in each list (default and maximum 5)."
},
"detail": {
"enum": [
"summary",
"full"
],
"type": "string",
"default": "summary",
"description": "summary returns one source sentence per fact; full returns every recorded fact and sentence."
},
"format": {
"enum": [
"full",
"brief"
],
"type": "string",
"default": "full",
"description": "brief returns, per plan, the plan, provider, whether it meets all, the monthly cost and the requested conditions only, each with its verdict, a one-line reason, one source sentence and its source (about a quarter of the full size); the verdicts and costs are those of full. Call it right before choosing or buying a plan."
},
"mcp_auth": {
"type": "array",
"items": {
"enum": [
"api_key",
"oauth"
],
"type": "string"
},
"minItems": 1,
"description": "Ways to authenticate to the provider's hosted MCP endpoint, any one of which will do: api_key, oauth. Met when the endpoint accepts at least one of them; implies a hosted endpoint.",
"uniqueItems": true
},
"needs_zdr": {
"type": "boolean",
"description": "Zero data retention must be usable on this plan. A provider that offers it only on a custom enterprise agreement does not meet it on its listed plans."
},
"preferred": {
"type": "object",
"properties": {
"mcp_auth": {
"type": "array",
"items": {
"enum": [
"api_key",
"oauth"
],
"type": "string"
},
"minItems": 1,
"description": "Ways to authenticate to the provider's hosted MCP endpoint, any one of which will do: api_key, oauth. Met when the endpoint accepts at least one of them; implies a hosted endpoint.",
"uniqueItems": true
},
"needs_zdr": {
"type": "boolean",
"description": "Zero data retention must be usable on this plan. A provider that offers it only on a custom enterprise agreement does not meet it on its listed plans."
},
"needs_soc2": {
"enum": [
true,
false,
"II"
],
"type": [
"boolean",
"string"
],
"description": "The provider must hold a SOC 2 report: true for Type I or Type II, \"II\" for Type II."
},
"needs_batch": {
"type": "boolean",
"description": "The plan must transcribe recorded audio (a file or a stored recording), for speech-to-text. A plan priced for live audio only is not met."
},
"data_regions": {
"type": "array",
"items": {
"type": "string",
"maxLength": 20,
"minLength": 2
},
"minItems": 1,
"description": "Regions where data must be stored or processed, e.g. [\"EU\"]. Different from exit-IP countries.",
"uniqueItems": true
},
"needs_korean": {
"type": "boolean",
"description": "The service must voice Korean text (text-to-speech) or transcribe Korean speech (speech-to-text)."
},
"billing_types": {
"type": "array",
"items": {
"enum": [
"monthly_subscription",
"annual_subscription",
"pay_as_you_go",
"prepaid_credits"
],
"type": "string"
},
"minItems": 1,
"description": "Acceptable billing: monthly_subscription (A plan with a fixed fee (or minimum commitment) billed every month.) annual_subscription (A plan paid for a year at a time.) pay_as_you_go (No plan fee; a price per unit of use, billed after use or drawn from a balance topped up with any amount.) prepaid_credits (Money paid before use: a credit pack, a balance topped up first, or a plan amount charged in advance for the period.) Free plans always qualify.",
"uniqueItems": true
},
"needs_inbound": {
"type": "boolean",
"description": "The service must receive email for the buyer and hand it on (inbound parsing, routes), for transactional email."
},
"search_engines": {
"type": "array",
"items": {
"enum": [
"google",
"bing",
"yahoo",
"yandex",
"baidu",
"duckduckgo",
"naver",
"brave"
],
"type": "string"
},
"minItems": 1,
"description": "Search engines whose results the plan must return, each at the plan's search price: google, bing, yahoo, yandex, baidu, duckduckgo, naver, brave (brave is Brave's own index). monthly_searches is the total over all of them.",
"uniqueItems": true
},
"captcha_solving": {
"type": "boolean",
"description": "The plan must solve CAPTCHAs for the browser sessions (the vendor does it, not the buyer own service)."
},
"min_concurrency": {
"type": "integer",
"minimum": 1,
"description": "Minimum number of concurrent requests (or browsers) the plan must allow."
},
"needs_streaming": {
"type": "boolean",
"description": "The service must return audio in real time as it is made (streaming or a WebSocket), for text-to-speech; for speech-to-text, it must transcribe live audio as it arrives. A speech-to-text price line is per mode, so a plan priced for recorded audio only is not met."
},
"needs_remote_mcp": {
"type": "boolean",
"description": "The provider must host a remote MCP endpoint (a URL an MCP client connects to). An official server that can only be run on the buyer own machine does not meet it."
},
"proxies_included": {
"type": "boolean",
"description": "The plan must include proxy traffic of the vendor (some gigabytes in the plan fee). Proxy traffic sold only per gigabyte on top of the fee, or only on another plan, does not count."
},
"search_countries": {
"type": "array",
"items": {
"type": "string",
"pattern": "^[A-Z]{2}$"
},
"minItems": 1,
"description": "ISO 3166-1 alpha-2 codes of the countries whose search results the searches must return (the search engine's country setting, e.g. Google gl), e.g. [\"GB\",\"CA\"]. Different from exit_ip_countries.",
"uniqueItems": true
},
"exit_ip_countries": {
"type": "array",
"items": {
"type": "string",
"pattern": "^[A-Z]{2}$"
},
"minItems": 1,
"description": "ISO 3166-1 alpha-2 codes of countries the page requests must exit from, e.g. [\"US\",\"DE\"]. For search results of a country use search_countries.",
"uniqueItems": true
},
"min_pages_per_doc": {
"type": "integer",
"minimum": 1,
"description": "Pages one document may have at the most the plan allows, for document parsing. Met when the stated limit is at least this many (or the pages say there is no page limit); a plan whose pages do not state a limit is unknown. The limit of the largest way of sending (batch or asynchronous) counts."
},
"needs_diarization": {
"type": "boolean",
"description": "The plan must label who spoke (speaker diarization), for speech-to-text. Where the vendor charges extra for it, the extra price is added to the monthly cost; where the pages state no price or no inclusion the plan is unknown."
},
"needs_no_training": {
"type": "boolean",
"description": "An official page must say the vendor does not use the buyer's text, audio or documents to train its models without the buyer opting in. A use that is on by default with an opt-out to ask for does not count."
},
"session_recording": {
"type": "boolean",
"description": "The plan must record browser sessions (video or replay) that the buyer can watch afterwards."
},
"needs_dedicated_ip": {
"type": "boolean",
"description": "The plan must come with a dedicated sending IP address, for transactional email. A dedicated IP sold only as an add-on on top of the plan, or only on another plan, does not count."
},
"needs_official_mcp": {
"type": "boolean",
"description": "The provider must publish its own MCP server (hosted by it or run by the buyer), stated in its official documentation. A server only a third party published does not count."
},
"min_pages_per_crawl": {
"type": "integer",
"minimum": 1,
"description": "Pages one crawl job (from one start URL, following links) must be able to reach. A plan whose crawl has no page cap meets any number; give the size of the largest site to crawl. Different from the monthly page total."
},
"min_sending_domains": {
"type": "integer",
"minimum": 1,
"description": "Sending domains the plan must let one account authenticate, for transactional email. Met when the stated limit is at least this many (or the pages say it is unlimited); a plan whose pages do not state a limit is unknown."
},
"min_session_minutes": {
"type": "number",
"description": "Minutes one browser session must be able to run on this plan, for hosted browsers. Met when the stated longest session of the plan is at least this long; a plan whose pages do not state a session limit is unknown, and a limit the page gives only for another plan is not met.",
"exclusiveMinimum": 0
},
"needs_voice_cloning": {
"type": "boolean",
"description": "The plan must let the account clone a voice from its own recording, for text-to-speech. Cloning limited to eligible customers, a request form or an enterprise plan does not count for a plan that is not that plan."
},
"persistent_profiles": {
"type": "boolean",
"description": "The plan must keep browser profiles (login state, cookies) between sessions."
},
"search_result_types": {
"type": "array",
"items": {
"enum": [
"organic",
"ads",
"local_pack",
"knowledge_graph",
"people_also_ask",
"related_searches",
"shopping",
"news",
"images",
"videos",
"ai_overview"
],
"type": "string"
},
"minItems": 1,
"description": "Result types the parsed search response must contain: organic, ads, local_pack, knowledge_graph, people_also_ask, related_searches, shopping, news, images, videos, ai_overview.",
"uniqueItems": true
},
"max_monthly_cost_usd": {
"type": "number",
"minimum": 0,
"description": "Monthly budget in USD before tax. Compared with listed prices; annual plans use their per-month equivalent."
},
"needs_batch_discount": {
"type": "boolean",
"description": "An official page must say a batch or asynchronous way of sending documents costs less than the list price on the plan, for document parsing. The budget and the cost are judged at the list price, not at the batch price."
},
"needs_commercial_use": {
"type": "boolean",
"description": "The plan must allow commercial use of the generated audio, for text-to-speech. A free plan limited to non-commercial use does not count; a plan whose pages do not say is unknown."
},
"needs_no_min_billing": {
"type": "boolean",
"description": "An official page must say audio is billed by the second (or an increment of seconds) with no minimum billed duration per request, for speech-to-text. A page that says nothing about rounding is unknown."
},
"max_overage_usd_per_1k": {
"type": "number",
"minimum": 0,
"description": "The most the plan may charge for each 1,000 emails beyond its included volume, in USD, for transactional email. A plan whose extra price is not published as a per-1,000 figure is unknown."
},
"min_log_retention_days": {
"type": "integer",
"minimum": 1,
"description": "Days the plan must keep the logs or events of sent email where the account can read them, for transactional email. Longer retention sold as an add-on does not count."
},
"needs_table_extraction": {
"type": "boolean",
"description": "The service must return the tables of a page as structure (rows and cells), not only the text, for document parsing."
},
"search_returns_content": {
"type": "boolean",
"description": "The search response itself must carry the text of the result pages (extracted content), not only titles, links and snippets."
},
"min_requests_per_minute": {
"type": "number",
"description": "Minimum request rate the plan must allow, per minute.",
"exclusiveMinimum": 0
},
"realtime_search_required": {
"type": "boolean",
"description": "Search results must be returned in real time (not through a queue)."
},
"target_errors_not_billed": {
"type": "boolean",
"description": "Error responses from the target site (e.g. 404) must not be billed."
},
"needs_recurring_free_tier": {
"type": "boolean",
"description": "The plan must be usable every month without paying (a free plan with a monthly allowance or a monthly free credit)."
},
"failed_requests_not_billed": {
"type": "boolean",
"description": "Requests that fail on the provider side (timeouts, blocks, 5xx) must not be billed. A flat monthly price for unlimited requests meets it, since no request is billed on its own; when only success-based billing will do, use only_successful_requests_billed."
},
"only_successful_requests_billed": {
"type": "boolean",
"description": "Billing must count successful requests only: each successful request is charged (or draws credits) and failed ones cost nothing. A flat monthly price for unlimited requests does not meet it, since the price is the same whatever succeeds."
}
},
"description": "Nice-to-have conditions; they do not filter, they break ties.",
"additionalProperties": false
},
"providers": {
"type": "array",
"items": {
"type": "string",
"maxLength": 80,
"minLength": 1
},
"maxItems": 30,
"minItems": 1,
"description": "Judge only the plans of these providers (candidates you already have, for example from a web search). Give provider ids or names as listed, such as \"tavily\", \"Brave Search API\" or \"You.com\"; case does not matter. Names that are not providers here are listed under unknown_providers in the result."
},
"needs_soc2": {
"enum": [
true,
false,
"II"
],
"type": [
"boolean",
"string"
],
"description": "The provider must hold a SOC 2 report: true for Type I or Type II, \"II\" for Type II."
},
"needs_batch": {
"type": "boolean",
"description": "The plan must transcribe recorded audio (a file or a stored recording), for speech-to-text. A plan priced for live audio only is not met."
},
"data_regions": {
"type": "array",
"items": {
"type": "string",
"maxLength": 20,
"minLength": 2
},
"minItems": 1,
"description": "Regions where data must be stored or processed, e.g. [\"EU\"]. Different from exit-IP countries.",
"uniqueItems": true
},
"needs_korean": {
"type": "boolean",
"description": "The service must voice Korean text (text-to-speech) or transcribe Korean speech (speech-to-text)."
},
"billing_types": {
"type": "array",
"items": {
"enum": [
"monthly_subscription",
"annual_subscription",
"pay_as_you_go",
"prepaid_credits"
],
"type": "string"
},
"minItems": 1,
"description": "Acceptable billing: monthly_subscription (A plan with a fixed fee (or minimum commitment) billed every month.) annual_subscription (A plan paid for a year at a time.) pay_as_you_go (No plan fee; a price per unit of use, billed after use or drawn from a balance topped up with any amount.) prepaid_credits (Money paid before use: a credit pack, a balance topped up first, or a plan amount charged in advance for the period.) Free plans always qualify.",
"uniqueItems": true
},
"monthly_pages": {
"type": "object",
"properties": {
"javascript": {
"type": "integer",
"minimum": 0
},
"plain_html": {
"type": "integer",
"minimum": 0
},
"premium_proxy": {
"type": "integer",
"minimum": 0
},
"javascript_premium_proxy": {
"type": "integer",
"minimum": 0
}
},
"description": "Pages per month by type: plain_html (static pages), javascript (needs rendering), premium_proxy (blocked sites that need residential/premium proxies), javascript_premium_proxy (both).",
"minProperties": 1,
"additionalProperties": false
},
"needs_inbound": {
"type": "boolean",
"description": "The service must receive email for the buyer and hand it on (inbound parsing, routes), for transactional email."
},
"product_types": {
"type": "array",
"items": {
"enum": [
"scraping_api",
"serp_api",
"headless_browser",
"platform",
"email_api",
"tts_api",
"stt_api",
"docparse_api"
],
"type": "string"
},
"minItems": 1,
"description": "Limit to these product types. Default: every type that can serve the workload.",
"uniqueItems": true
},
"monthly_emails": {
"type": "number",
"description": "Emails sent per month, for transactional email APIs (SendGrid, Mailgun, Postmark, Resend, Amazon SES, Brevo, Mailtrap, Loops). It is the whole workload: give it instead of monthly_pages, monthly_searches and monthly_browser_hours, not with them. Only email products can serve it; other products are out of scope.",
"exclusiveMinimum": 0
},
"search_engines": {
"type": "array",
"items": {
"enum": [
"google",
"bing",
"yahoo",
"yandex",
"baidu",
"duckduckgo",
"naver",
"brave"
],
"type": "string"
},
"minItems": 1,
"description": "Search engines whose results the plan must return, each at the plan's search price: google, bing, yahoo, yandex, baidu, duckduckgo, naver, brave (brave is Brave's own index). monthly_searches is the total over all of them.",
"uniqueItems": true
},
"captcha_solving": {
"type": "boolean",
"description": "The plan must solve CAPTCHAs for the browser sessions (the vendor does it, not the buyer own service)."
},
"min_concurrency": {
"type": "integer",
"minimum": 1,
"description": "Minimum number of concurrent requests (or browsers) the plan must allow."
},
"needs_streaming": {
"type": "boolean",
"description": "The service must return audio in real time as it is made (streaming or a WebSocket), for text-to-speech; for speech-to-text, it must transcribe live audio as it arrives. A speech-to-text price line is per mode, so a plan priced for recorded audio only is not met."
},
"monthly_searches": {
"type": "integer",
"minimum": 0,
"description": "Search requests per month (one results page each)."
},
"needs_remote_mcp": {
"type": "boolean",
"description": "The provider must host a remote MCP endpoint (a URL an MCP client connects to). An official server that can only be run on the buyer own machine does not meet it."
},
"proxies_included": {
"type": "boolean",
"description": "The plan must include proxy traffic of the vendor (some gigabytes in the plan fee). Proxy traffic sold only per gigabyte on top of the fee, or only on another plan, does not count."
},
"search_countries": {
"type": "array",
"items": {
"type": "string",
"pattern": "^[A-Z]{2}$"
},
"minItems": 1,
"description": "ISO 3166-1 alpha-2 codes of the countries whose search results the searches must return (the search engine's country setting, e.g. Google gl), e.g. [\"GB\",\"CA\"]. Different from exit_ip_countries.",
"uniqueItems": true
},
"exit_ip_countries": {
"type": "array",
"items": {
"type": "string",
"pattern": "^[A-Z]{2}$"
},
"minItems": 1,
"description": "ISO 3166-1 alpha-2 codes of countries the page requests must exit from, e.g. [\"US\",\"DE\"]. For search results of a country use search_countries.",
"uniqueItems": true
},
"min_pages_per_doc": {
"type": "integer",
"minimum": 1,
"description": "Pages one document may have at the most the plan allows, for document parsing. Met when the stated limit is at least this many (or the pages say there is no page limit); a plan whose pages do not state a limit is unknown. The limit of the largest way of sending (batch or asynchronous) counts."
},
"needs_diarization": {
"type": "boolean",
"description": "The plan must label who spoke (speaker diarization), for speech-to-text. Where the vendor charges extra for it, the extra price is added to the monthly cost; where the pages state no price or no inclusion the plan is unknown."
},
"needs_no_training": {
"type": "boolean",
"description": "An official page must say the vendor does not use the buyer's text, audio or documents to train its models without the buyer opting in. A use that is on by default with an opt-out to ask for does not count."
},
"session_recording": {
"type": "boolean",
"description": "The plan must record browser sessions (video or replay) that the buyer can watch afterwards."
},
"monthly_characters": {
"type": "number",
"description": "Characters of text voiced per month, for text-to-speech APIs (ElevenLabs, Cartesia, Deepgram Aura, OpenAI, Google Cloud, Amazon Polly, Azure, Gradium, Rime, Inworld, MiniMax, Murf, Hume). It is the whole workload: give it instead of monthly_pages, monthly_searches, monthly_browser_hours and monthly_emails, not with them. Only text-to-speech products can serve it; other products are out of scope.",
"exclusiveMinimum": 0
},
"needs_dedicated_ip": {
"type": "boolean",
"description": "The plan must come with a dedicated sending IP address, for transactional email. A dedicated IP sold only as an add-on on top of the plan, or only on another plan, does not count."
},
"needs_official_mcp": {
"type": "boolean",
"description": "The provider must publish its own MCP server (hosted by it or run by the buyer), stated in its official documentation. A server only a third party published does not count."
},
"ai_extraction_pages": {
"type": "integer",
"minimum": 0,
"description": "How many of the pages need their fields extracted by an AI model (from a prompt or a schema, or automatically) without writing selectors. Each page counts in one of the two extraction fields."
},
"min_pages_per_crawl": {
"type": "integer",
"minimum": 1,
"description": "Pages one crawl job (from one start URL, following links) must be able to reach. A plan whose crawl has no page cap meets any number; give the size of the largest site to crawl. Different from the monthly page total."
},
"min_sending_domains": {
"type": "integer",
"minimum": 1,
"description": "Sending domains the plan must let one account authenticate, for transactional email. Met when the stated limit is at least this many (or the pages say it is unlimited); a plan whose pages do not state a limit is unknown."
},
"min_session_minutes": {
"type": "number",
"description": "Minutes one browser session must be able to run on this plan, for hosted browsers. Met when the stated longest session of the plan is at least this long; a plan whose pages do not state a session limit is unknown, and a limit the page gives only for another plan is not met.",
"exclusiveMinimum": 0
},
"monthly_audio_hours": {
"type": "number",
"description": "Hours of audio transcribed per month, for speech-to-text APIs (Deepgram, AssemblyAI, Speechmatics, Amazon Transcribe, Google Cloud, OpenAI). A price given per minute is multiplied by 60. It is the whole workload: give it instead of monthly_pages, monthly_searches, monthly_browser_hours, monthly_emails and monthly_characters, not with them. Only speech-to-text products can serve it; other products are out of scope.",
"exclusiveMinimum": 0
},
"monthly_pages_total": {
"type": "integer",
"minimum": 0,
"description": "Total pages per month when the split by type is not known yet. Costs and verdicts then cover every share of JavaScript-rendered pages from 0% to 100% of the total (no premium proxies), and the result lists monthly_pages under needs_input."
},
"needs_voice_cloning": {
"type": "boolean",
"description": "The plan must let the account clone a voice from its own recording, for text-to-speech. Cloning limited to eligible customers, a request form or an enterprise plan does not count for a plan that is not that plan."
},
"persistent_profiles": {
"type": "boolean",
"description": "The plan must keep browser profiles (login state, cookies) between sessions."
},
"search_result_types": {
"type": "array",
"items": {
"enum": [
"organic",
"ads",
"local_pack",
"knowledge_graph",
"people_also_ask",
"related_searches",
"shopping",
"news",
"images",
"videos",
"ai_overview"
],
"type": "string"
},
"minItems": 1,
"description": "Result types the parsed search response must contain: organic, ads, local_pack, knowledge_graph, people_also_ask, related_searches, shopping, news, images, videos, ai_overview.",
"uniqueItems": true
},
"max_monthly_cost_usd": {
"type": "number",
"minimum": 0,
"description": "Monthly budget in USD before tax. Compared with listed prices; annual plans use their per-month equivalent."
},
"needs_batch_discount": {
"type": "boolean",
"description": "An official page must say a batch or asynchronous way of sending documents costs less than the list price on the plan, for document parsing. The budget and the cost are judged at the list price, not at the batch price."
},
"needs_commercial_use": {
"type": "boolean",
"description": "The plan must allow commercial use of the generated audio, for text-to-speech. A free plan limited to non-commercial use does not count; a plan whose pages do not say is unknown."
},
"needs_no_min_billing": {
"type": "boolean",
"description": "An official page must say audio is billed by the second (or an increment of seconds) with no minimum billed duration per request, for speech-to-text. A page that says nothing about rounding is unknown."
},
"monthly_browser_hours": {
"type": "number",
"description": "Browser time per month in hours, for hosted browsers (Browserbase, Browserless) billed by browser time. It is the whole workload: give it instead of monthly_pages, monthly_searches and browser_seconds_per_page, not with them. Only browser products can serve it; other products are out of scope.",
"exclusiveMinimum": 0
},
"max_overage_usd_per_1k": {
"type": "number",
"minimum": 0,
"description": "The most the plan may charge for each 1,000 emails beyond its included volume, in USD, for transactional email. A plan whose extra price is not published as a per-1,000 figure is unknown."
},
"min_log_retention_days": {
"type": "integer",
"minimum": 1,
"description": "Days the plan must keep the logs or events of sent email where the account can read them, for transactional email. Longer retention sold as an add-on does not count."
},
"monthly_document_pages": {
"type": "number",
"description": "Pages of documents parsed per month, for document-parsing APIs (LlamaParse, Reducto, Unstructured, Mistral OCR, LandingAI, Amazon Textract, Google Document AI, Azure Document Intelligence, Datalab, Mathpix, Mindee, Nanonets, Upstage). A price given per credit is multiplied by the credits one page costs. It is the whole workload: give it instead of monthly_pages, monthly_searches, monthly_browser_hours, monthly_emails, monthly_characters and monthly_audio_hours, not with them. Only document-parsing products can serve it; other products are out of scope.",
"exclusiveMinimum": 0
},
"needs_table_extraction": {
"type": "boolean",
"description": "The service must return the tables of a page as structure (rows and cells), not only the text, for document parsing."
},
"search_returns_content": {
"type": "boolean",
"description": "The search response itself must carry the text of the result pages (extracted content), not only titles, links and snippets."
},
"min_requests_per_minute": {
"type": "number",
"description": "Minimum request rate the plan must allow, per minute.",
"exclusiveMinimum": 0
},
"browser_seconds_per_page": {
"type": "number",
"description": "Browser time per page in seconds, for headless-browser products billed by time. Every plan must then serve pages that take this long: a hosted browser does, a request-based API only when one request may run that long.",
"exclusiveMinimum": 0
},
"realtime_search_required": {
"type": "boolean",
"description": "Search results must be returned in real time (not through a queue)."
},
"target_errors_not_billed": {
"type": "boolean",
"description": "Error responses from the target site (e.g. 404) must not be billed."
},
"needs_recurring_free_tier": {
"type": "boolean",
"description": "The plan must be usable every month without paying (a free plan with a monthly allowance or a monthly free credit)."
},
"failed_requests_not_billed": {
"type": "boolean",
"description": "Requests that fail on the provider side (timeouts, blocks, 5xx) must not be billed. A flat monthly price for unlimited requests meets it, since no request is billed on its own; when only success-based billing will do, use only_successful_requests_billed."
},
"structured_extraction_pages": {
"type": "integer",
"minimum": 0,
"description": "How many of the pages must come back as JSON fields rather than HTML or text, by any method the plan offers (CSS or XPath selectors, a schema, or AI). When the fields must be found without writing selectors, use ai_extraction_pages instead; each page counts in one of the two."
},
"only_successful_requests_billed": {
"type": "boolean",
"description": "Billing must count successful requests only: each successful request is charged (or draws credits) and failed ones cost nothing. A flat monthly price for unlimited requests does not meet it, since the price is the same whatever succeeds."
}
},
"additionalProperties": false
}{
"type": "object",
"required": [
"request",
"claims"
],
"properties": {
"claims": {
"type": "array",
"items": {
"type": "object",
"required": [
"plan"
],
"properties": {
"plan": {
"type": "string",
"maxLength": 300,
"minLength": 1,
"description": "Plan id, provider and plan name, or pricing-page URL, read as check_conditions reads plans."
},
"values": {
"type": "object",
"properties": {
"zdr": {
"type": [
"number",
"string",
"boolean",
"object",
"array",
"null"
]
},
"pack": {
"type": [
"number",
"string",
"boolean",
"object",
"array",
"null"
]
},
"batch": {
"type": [
"number",
"string",
"boolean",
"object",
"array",
"null"
]
},
"overage": {
"type": [
"number",
"string",
"boolean",
"object",
"array",
"null"
]
},
"proxies": {
"type": [
"number",
"string",
"boolean",
"object",
"array",
"null"
]
},
"geo_cost": {
"type": [
"number",
"string",
"boolean",
"object",
"array",
"null"
]
},
"rollover": {
"type": [
"number",
"string",
"boolean",
"object",
"array",
"null"
]
},
"units_js": {
"type": [
"number",
"string",
"boolean",
"object",
"array",
"null"
]
},
"rate_card": {
"type": [
"number",
"string",
"boolean",
"object",
"array",
"null"
]
},
"soc2_type": {
"type": [
"number",
"string",
"boolean",
"object",
"array",
"null"
]
},
"streaming": {
"type": [
"number",
"string",
"boolean",
"object",
"array",
"null"
]
},
"mcp_server": {
"type": [
"number",
"string",
"boolean",
"object",
"array",
"null"
]
},
"rate_limit": {
"type": [
"number",
"string",
"boolean",
"object",
"array",
"null"
]
},
"tier_rates": {
"type": [
"number",
"string",
"boolean",
"object",
"array",
"null"
]
},
"usage_rate": {
"type": [
"number",
"string",
"boolean",
"object",
"array",
"null"
]
},
"concurrency": {
"type": [
"number",
"string",
"boolean",
"object",
"array",
"null"
]
},
"data_region": {
"type": [
"number",
"string",
"boolean",
"object",
"array",
"null"
]
},
"diarization": {
"type": [
"number",
"string",
"boolean",
"object",
"array",
"null"
]
},
"units_basic": {
"type": [
"number",
"string",
"boolean",
"object",
"array",
"null"
]
},
"dedicated_ip": {
"type": [
"number",
"string",
"boolean",
"object",
"array",
"null"
]
},
"js_rendering": {
"type": [
"number",
"string",
"boolean",
"object",
"array",
"null"
]
},
"languages_ko": {
"type": [
"number",
"string",
"boolean",
"object",
"array",
"null"
]
},
"price_annual": {
"type": [
"number",
"string",
"boolean",
"object",
"array",
"null"
]
},
"serp_engines": {
"type": [
"number",
"string",
"boolean",
"object",
"array",
"null"
]
},
"units_search": {
"type": [
"number",
"string",
"boolean",
"object",
"array",
"null"
]
},
"ai_extraction": {
"type": [
"number",
"string",
"boolean",
"object",
"array",
"null"
]
},
"geo_targeting": {
"type": [
"number",
"string",
"boolean",
"object",
"array",
"null"
]
},
"inbound_parse": {
"type": [
"number",
"string",
"boolean",
"object",
"array",
"null"
]
},
"premium_proxy": {
"type": [
"number",
"string",
"boolean",
"object",
"array",
"null"
]
},
"price_monthly": {
"type": [
"number",
"string",
"boolean",
"object",
"array",
"null"
]
},
"units_extract": {
"type": [
"number",
"string",
"boolean",
"object",
"array",
"null"
]
},
"units_premium": {
"type": [
"number",
"string",
"boolean",
"object",
"array",
"null"
]
},
"voice_cloning": {
"type": [
"number",
"string",
"boolean",
"object",
"array",
"null"
]
},
"batch_discount": {
"type": [
"number",
"string",
"boolean",
"object",
"array",
"null"
]
},
"commercial_use": {
"type": [
"number",
"string",
"boolean",
"object",
"array",
"null"
]
},
"free_allowance": {
"type": [
"number",
"string",
"boolean",
"object",
"array",
"null"
]
},
"included_units": {
"type": [
"number",
"string",
"boolean",
"object",
"array",
"null"
]
},
"no_min_billing": {
"type": [
"number",
"string",
"boolean",
"object",
"array",
"null"
]
},
"search_content": {
"type": [
"number",
"string",
"boolean",
"object",
"array",
"null"
]
},
"browser_billing": {
"type": [
"number",
"string",
"boolean",
"object",
"array",
"null"
]
},
"captcha_solving": {
"type": [
"number",
"string",
"boolean",
"object",
"array",
"null"
]
},
"prepaid_billing": {
"type": [
"number",
"string",
"boolean",
"object",
"array",
"null"
]
},
"request_timeout": {
"type": [
"number",
"string",
"boolean",
"object",
"array",
"null"
]
},
"sending_domains": {
"type": [
"number",
"string",
"boolean",
"object",
"array",
"null"
]
},
"crawl_page_limit": {
"type": [
"number",
"string",
"boolean",
"object",
"array",
"null"
]
},
"table_extraction": {
"type": [
"number",
"string",
"boolean",
"object",
"array",
"null"
]
},
"units_ai_extract": {
"type": [
"number",
"string",
"boolean",
"object",
"array",
"null"
]
},
"units_js_premium": {
"type": [
"number",
"string",
"boolean",
"object",
"array",
"null"
]
},
"diarization_addon": {
"type": [
"number",
"string",
"boolean",
"object",
"array",
"null"
]
},
"max_pages_per_doc": {
"type": [
"number",
"string",
"boolean",
"object",
"array",
"null"
]
},
"serp_localization": {
"type": [
"number",
"string",
"boolean",
"object",
"array",
"null"
]
},
"serp_result_types": {
"type": [
"number",
"string",
"boolean",
"object",
"array",
"null"
]
},
"session_recording": {
"type": [
"number",
"string",
"boolean",
"object",
"array",
"null"
]
},
"commitment_monthly": {
"type": [
"number",
"string",
"boolean",
"object",
"array",
"null"
]
},
"log_retention_days": {
"type": [
"number",
"string",
"boolean",
"object",
"array",
"null"
]
},
"monthly_credit_usd": {
"type": [
"number",
"string",
"boolean",
"object",
"array",
"null"
]
},
"prices_exclude_tax": {
"type": [
"number",
"string",
"boolean",
"object",
"array",
"null"
]
},
"serp_response_mode": {
"type": [
"number",
"string",
"boolean",
"object",
"array",
"null"
]
},
"max_session_minutes": {
"type": [
"number",
"string",
"boolean",
"object",
"array",
"null"
]
},
"persistent_profiles": {
"type": [
"number",
"string",
"boolean",
"object",
"array",
"null"
]
},
"structured_extraction": {
"type": [
"number",
"string",
"boolean",
"object",
"array",
"null"
]
},
"failed_request_billing": {
"type": [
"number",
"string",
"boolean",
"object",
"array",
"null"
]
},
"data_not_used_for_training": {
"type": [
"number",
"string",
"boolean",
"object",
"array",
"null"
]
}
},
"description": "Recorded values the answer states, by fact key (price_monthly, concurrency, included_units ...). Another key is returned in unchecked, not checked.",
"additionalProperties": true
},
"billing": {
"enum": [
"monthly",
"annual",
"pay_as_you_go",
"prepaid",
"free",
"other"
],
"type": "string",
"description": "The billing the answer gives the cost for."
},
"meets_all": {
"enum": [
true,
false,
"unknown"
],
"type": [
"boolean",
"string"
],
"description": "Whether the answer says the plan meets every required condition."
},
"conditions": {
"type": "object",
"properties": {
"mcp_auth": {
"enum": [
"met",
"not_met",
"unknown"
],
"type": "string"
},
"needs_zdr": {
"enum": [
"met",
"not_met",
"unknown"
],
"type": "string"
},
"needs_soc2": {
"enum": [
"met",
"not_met",
"unknown"
],
"type": "string"
},
"needs_batch": {
"enum": [
"met",
"not_met",
"unknown"
],
"type": "string"
},
"data_regions": {
"enum": [
"met",
"not_met",
"unknown"
],
"type": "string"
},
"needs_korean": {
"enum": [
"met",
"not_met",
"unknown"
],
"type": "string"
},
"billing_types": {
"enum": [
"met",
"not_met",
"unknown"
],
"type": "string"
},
"needs_inbound": {
"enum": [
"met",
"not_met",
"unknown"
],
"type": "string"
},
"search_engines": {
"enum": [
"met",
"not_met",
"unknown"
],
"type": "string"
},
"captcha_solving": {
"enum": [
"met",
"not_met",
"unknown"
],
"type": "string"
},
"min_concurrency": {
"enum": [
"met",
"not_met",
"unknown"
],
"type": "string"
},
"needs_streaming": {
"enum": [
"met",
"not_met",
"unknown"
],
"type": "string"
},
"needs_remote_mcp": {
"enum": [
"met",
"not_met",
"unknown"
],
"type": "string"
},
"proxies_included": {
"enum": [
"met",
"not_met",
"unknown"
],
"type": "string"
},
"search_countries": {
"enum": [
"met",
"not_met",
"unknown"
],
"type": "string"
},
"exit_ip_countries": {
"enum": [
"met",
"not_met",
"unknown"
],
"type": "string"
},
"min_pages_per_doc": {
"enum": [
"met",
"not_met",
"unknown"
],
"type": "string"
},
"needs_diarization": {
"enum": [
"met",
"not_met",
"unknown"
],
"type": "string"
},
"needs_no_training": {
"enum": [
"met",
"not_met",
"unknown"
],
"type": "string"
},
"session_recording": {
"enum": [
"met",
"not_met",
"unknown"
],
"type": "string"
},
"needs_dedicated_ip": {
"enum": [
"met",
"not_met",
"unknown"
],
"type": "string"
},
"needs_official_mcp": {
"enum": [
"met",
"not_met",
"unknown"
],
"type": "string"
},
"min_pages_per_crawl": {
"enum": [
"met",
"not_met",
"unknown"
],
"type": "string"
},
"min_sending_domains": {
"enum": [
"met",
"not_met",
"unknown"
],
"type": "string"
},
"min_session_minutes": {
"enum": [
"met",
"not_met",
"unknown"
],
"type": "string"
},
"needs_voice_cloning": {
"enum": [
"met",
"not_met",
"unknown"
],
"type": "string"
},
"persistent_profiles": {
"enum": [
"met",
"not_met",
"unknown"
],
"type": "string"
},
"search_result_types": {
"enum": [
"met",
"not_met",
"unknown"
],
"type": "string"
},
"max_monthly_cost_usd": {
"enum": [
"met",
"not_met",
"unknown"
],
"type": "string"
},
"needs_batch_discount": {
"enum": [
"met",
"not_met",
"unknown"
],
"type": "string"
},
"needs_commercial_use": {
"enum": [
"met",
"not_met",
"unknown"
],
"type": "string"
},
"needs_no_min_billing": {
"enum": [
"met",
"not_met",
"unknown"
],
"type": "string"
},
"max_overage_usd_per_1k": {
"enum": [
"met",
"not_met",
"unknown"
],
"type": "string"
},
"min_log_retention_days": {
"enum": [
"met",
"not_met",
"unknown"
],
"type": "string"
},
"needs_table_extraction": {
"enum": [
"met",
"not_met",
"unknown"
],
"type": "string"
},
"search_returns_content": {
"enum": [
"met",
"not_met",
"unknown"
],
"type": "string"
},
"min_requests_per_minute": {
"enum": [
"met",
"not_met",
"unknown"
],
"type": "string"
},
"realtime_search_required": {
"enum": [
"met",
"not_met",
"unknown"
],
"type": "string"
},
"target_errors_not_billed": {
"enum": [
"met",
"not_met",
"unknown"
],
"type": "string"
},
"needs_recurring_free_tier": {
"enum": [
"met",
"not_met",
"unknown"
],
"type": "string"
},
"failed_requests_not_billed": {
"enum": [
"met",
"not_met",
"unknown"
],
"type": "string"
},
"only_successful_requests_billed": {
"enum": [
"met",
"not_met",
"unknown"
],
"type": "string"
}
},
"description": "What the answer says about single conditions, by request field. Another key is returned in unchecked, not checked.",
"additionalProperties": true
},
"monthly_cost_usd": {
"type": [
"number",
"array",
"null"
],
"items": {
"type": "number",
"minimum": 0
},
"maxItems": 2,
"minItems": 2,
"description": "The monthly cost the answer states: a number, [low, high], or null when the answer says it cannot be given."
}
},
"additionalProperties": false
},
"maxItems": 30,
"minItems": 1,
"description": "One entry per plan the answer names, with what the answer says about it."
},
"request": {
"type": "object",
"properties": {
"limit": {
"type": "integer",
"default": 5,
"maximum": 5,
"minimum": 1,
"description": "Maximum plans returned in each list (default and maximum 5)."
},
"detail": {
"enum": [
"summary",
"full"
],
"type": "string",
"default": "summary",
"description": "summary returns one source sentence per fact; full returns every recorded fact and sentence."
},
"format": {
"enum": [
"full",
"brief"
],
"type": "string",
"default": "full",
"description": "brief returns, per plan, the plan, provider, whether it meets all, the monthly cost and the requested conditions only, each with its verdict, a one-line reason, one source sentence and its source (about a quarter of the full size); the verdicts and costs are those of full. Call it right before choosing or buying a plan."
},
"mcp_auth": {
"type": "array",
"items": {
"enum": [
"api_key",
"oauth"
],
"type": "string"
},
"minItems": 1,
"description": "Ways to authenticate to the provider's hosted MCP endpoint, any one of which will do: api_key, oauth. Met when the endpoint accepts at least one of them; implies a hosted endpoint.",
"uniqueItems": true
},
"needs_zdr": {
"type": "boolean",
"description": "Zero data retention must be usable on this plan. A provider that offers it only on a custom enterprise agreement does not meet it on its listed plans."
},
"preferred": {
"type": "object",
"properties": {
"mcp_auth": {
"type": "array",
"items": {
"enum": [
"api_key",
"oauth"
],
"type": "string"
},
"minItems": 1,
"description": "Ways to authenticate to the provider's hosted MCP endpoint, any one of which will do: api_key, oauth. Met when the endpoint accepts at least one of them; implies a hosted endpoint.",
"uniqueItems": true
},
"needs_zdr": {
"type": "boolean",
"description": "Zero data retention must be usable on this plan. A provider that offers it only on a custom enterprise agreement does not meet it on its listed plans."
},
"needs_soc2": {
"enum": [
true,
false,
"II"
],
"type": [
"boolean",
"string"
],
"description": "The provider must hold a SOC 2 report: true for Type I or Type II, \"II\" for Type II."
},
"needs_batch": {
"type": "boolean",
"description": "The plan must transcribe recorded audio (a file or a stored recording), for speech-to-text. A plan priced for live audio only is not met."
},
"data_regions": {
"type": "array",
"items": {
"type": "string",
"maxLength": 20,
"minLength": 2
},
"minItems": 1,
"description": "Regions where data must be stored or processed, e.g. [\"EU\"]. Different from exit-IP countries.",
"uniqueItems": true
},
"needs_korean": {
"type": "boolean",
"description": "The service must voice Korean text (text-to-speech) or transcribe Korean speech (speech-to-text)."
},
"billing_types": {
"type": "array",
"items": {
"enum": [
"monthly_subscription",
"annual_subscription",
"pay_as_you_go",
"prepaid_credits"
],
"type": "string"
},
"minItems": 1,
"description": "Acceptable billing: monthly_subscription (A plan with a fixed fee (or minimum commitment) billed every month.) annual_subscription (A plan paid for a year at a time.) pay_as_you_go (No plan fee; a price per unit of use, billed after use or drawn from a balance topped up with any amount.) prepaid_credits (Money paid before use: a credit pack, a balance topped up first, or a plan amount charged in advance for the period.) Free plans always qualify.",
"uniqueItems": true
},
"needs_inbound": {
"type": "boolean",
"description": "The service must receive email for the buyer and hand it on (inbound parsing, routes), for transactional email."
},
"search_engines": {
"type": "array",
"items": {
"enum": [
"google",
"bing",
"yahoo",
"yandex",
"baidu",
"duckduckgo",
"naver",
"brave"
],
"type": "string"
},
"minItems": 1,
"description": "Search engines whose results the plan must return, each at the plan's search price: google, bing, yahoo, yandex, baidu, duckduckgo, naver, brave (brave is Brave's own index). monthly_searches is the total over all of them.",
"uniqueItems": true
},
"captcha_solving": {
"type": "boolean",
"description": "The plan must solve CAPTCHAs for the browser sessions (the vendor does it, not the buyer own service)."
},
"min_concurrency": {
"type": "integer",
"minimum": 1,
"description": "Minimum number of concurrent requests (or browsers) the plan must allow."
},
"needs_streaming": {
"type": "boolean",
"description": "The service must return audio in real time as it is made (streaming or a WebSocket), for text-to-speech; for speech-to-text, it must transcribe live audio as it arrives. A speech-to-text price line is per mode, so a plan priced for recorded audio only is not met."
},
"needs_remote_mcp": {
"type": "boolean",
"description": "The provider must host a remote MCP endpoint (a URL an MCP client connects to). An official server that can only be run on the buyer own machine does not meet it."
},
"proxies_included": {
"type": "boolean",
"description": "The plan must include proxy traffic of the vendor (some gigabytes in the plan fee). Proxy traffic sold only per gigabyte on top of the fee, or only on another plan, does not count."
},
"search_countries": {
"type": "array",
"items": {
"type": "string",
"pattern": "^[A-Z]{2}$"
},
"minItems": 1,
"description": "ISO 3166-1 alpha-2 codes of the countries whose search results the searches must return (the search engine's country setting, e.g. Google gl), e.g. [\"GB\",\"CA\"]. Different from exit_ip_countries.",
"uniqueItems": true
},
"exit_ip_countries": {
"type": "array",
"items": {
"type": "string",
"pattern": "^[A-Z]{2}$"
},
"minItems": 1,
"description": "ISO 3166-1 alpha-2 codes of countries the page requests must exit from, e.g. [\"US\",\"DE\"]. For search results of a country use search_countries.",
"uniqueItems": true
},
"min_pages_per_doc": {
"type": "integer",
"minimum": 1,
"description": "Pages one document may have at the most the plan allows, for document parsing. Met when the stated limit is at least this many (or the pages say there is no page limit); a plan whose pages do not state a limit is unknown. The limit of the largest way of sending (batch or asynchronous) counts."
},
"needs_diarization": {
"type": "boolean",
"description": "The plan must label who spoke (speaker diarization), for speech-to-text. Where the vendor charges extra for it, the extra price is added to the monthly cost; where the pages state no price or no inclusion the plan is unknown."
},
"needs_no_training": {
"type": "boolean",
"description": "An official page must say the vendor does not use the buyer's text, audio or documents to train its models without the buyer opting in. A use that is on by default with an opt-out to ask for does not count."
},
"session_recording": {
"type": "boolean",
"description": "The plan must record browser sessions (video or replay) that the buyer can watch afterwards."
},
"needs_dedicated_ip": {
"type": "boolean",
"description": "The plan must come with a dedicated sending IP address, for transactional email. A dedicated IP sold only as an add-on on top of the plan, or only on another plan, does not count."
},
"needs_official_mcp": {
"type": "boolean",
"description": "The provider must publish its own MCP server (hosted by it or run by the buyer), stated in its official documentation. A server only a third party published does not count."
},
"min_pages_per_crawl": {
"type": "integer",
"minimum": 1,
"description": "Pages one crawl job (from one start URL, following links) must be able to reach. A plan whose crawl has no page cap meets any number; give the size of the largest site to crawl. Different from the monthly page total."
},
"min_sending_domains": {
"type": "integer",
"minimum": 1,
"description": "Sending domains the plan must let one account authenticate, for transactional email. Met when the stated limit is at least this many (or the pages say it is unlimited); a plan whose pages do not state a limit is unknown."
},
"min_session_minutes": {
"type": "number",
"description": "Minutes one browser session must be able to run on this plan, for hosted browsers. Met when the stated longest session of the plan is at least this long; a plan whose pages do not state a session limit is unknown, and a limit the page gives only for another plan is not met.",
"exclusiveMinimum": 0
},
"needs_voice_cloning": {
"type": "boolean",
"description": "The plan must let the account clone a voice from its own recording, for text-to-speech. Cloning limited to eligible customers, a request form or an enterprise plan does not count for a plan that is not that plan."
},
"persistent_profiles": {
"type": "boolean",
"description": "The plan must keep browser profiles (login state, cookies) between sessions."
},
"search_result_types": {
"type": "array",
"items": {
"enum": [
"organic",
"ads",
"local_pack",
"knowledge_graph",
"people_also_ask",
"related_searches",
"shopping",
"news",
"images",
"videos",
"ai_overview"
],
"type": "string"
},
"minItems": 1,
"description": "Result types the parsed search response must contain: organic, ads, local_pack, knowledge_graph, people_also_ask, related_searches, shopping, news, images, videos, ai_overview.",
"uniqueItems": true
},
"max_monthly_cost_usd": {
"type": "number",
"minimum": 0,
"description": "Monthly budget in USD before tax. Compared with listed prices; annual plans use their per-month equivalent."
},
"needs_batch_discount": {
"type": "boolean",
"description": "An official page must say a batch or asynchronous way of sending documents costs less than the list price on the plan, for document parsing. The budget and the cost are judged at the list price, not at the batch price."
},
"needs_commercial_use": {
"type": "boolean",
"description": "The plan must allow commercial use of the generated audio, for text-to-speech. A free plan limited to non-commercial use does not count; a plan whose pages do not say is unknown."
},
"needs_no_min_billing": {
"type": "boolean",
"description": "An official page must say audio is billed by the second (or an increment of seconds) with no minimum billed duration per request, for speech-to-text. A page that says nothing about rounding is unknown."
},
"max_overage_usd_per_1k": {
"type": "number",
"minimum": 0,
"description": "The most the plan may charge for each 1,000 emails beyond its included volume, in USD, for transactional email. A plan whose extra price is not published as a per-1,000 figure is unknown."
},
"min_log_retention_days": {
"type": "integer",
"minimum": 1,
"description": "Days the plan must keep the logs or events of sent email where the account can read them, for transactional email. Longer retention sold as an add-on does not count."
},
"needs_table_extraction": {
"type": "boolean",
"description": "The service must return the tables of a page as structure (rows and cells), not only the text, for document parsing."
},
"search_returns_content": {
"type": "boolean",
"description": "The search response itself must carry the text of the result pages (extracted content), not only titles, links and snippets."
},
"min_requests_per_minute": {
"type": "number",
"description": "Minimum request rate the plan must allow, per minute.",
"exclusiveMinimum": 0
},
"realtime_search_required": {
"type": "boolean",
"description": "Search results must be returned in real time (not through a queue)."
},
"target_errors_not_billed": {
"type": "boolean",
"description": "Error responses from the target site (e.g. 404) must not be billed."
},
"needs_recurring_free_tier": {
"type": "boolean",
"description": "The plan must be usable every month without paying (a free plan with a monthly allowance or a monthly free credit)."
},
"failed_requests_not_billed": {
"type": "boolean",
"description": "Requests that fail on the provider side (timeouts, blocks, 5xx) must not be billed. A flat monthly price for unlimited requests meets it, since no request is billed on its own; when only success-based billing will do, use only_successful_requests_billed."
},
"only_successful_requests_billed": {
"type": "boolean",
"description": "Billing must count successful requests only: each successful request is charged (or draws credits) and failed ones cost nothing. A flat monthly price for unlimited requests does not meet it, since the price is the same whatever succeeds."
}
},
"description": "Nice-to-have conditions; they do not filter, they break ties.",
"additionalProperties": false
},
"providers": {
"type": "array",
"items": {
"type": "string",
"maxLength": 80,
"minLength": 1
},
"maxItems": 30,
"minItems": 1,
"description": "Judge only the plans of these providers (candidates you already have, for example from a web search). Give provider ids or names as listed, such as \"tavily\", \"Brave Search API\" or \"You.com\"; case does not matter. Names that are not providers here are listed under unknown_providers in the result."
},
"needs_soc2": {
"enum": [
true,
false,
"II"
],
"type": [
"boolean",
"string"
],
"description": "The provider must hold a SOC 2 report: true for Type I or Type II, \"II\" for Type II."
},
"needs_batch": {
"type": "boolean",
"description": "The plan must transcribe recorded audio (a file or a stored recording), for speech-to-text. A plan priced for live audio only is not met."
},
"data_regions": {
"type": "array",
"items": {
"type": "string",
"maxLength": 20,
"minLength": 2
},
"minItems": 1,
"description": "Regions where data must be stored or processed, e.g. [\"EU\"]. Different from exit-IP countries.",
"uniqueItems": true
},
"needs_korean": {
"type": "boolean",
"description": "The service must voice Korean text (text-to-speech) or transcribe Korean speech (speech-to-text)."
},
"billing_types": {
"type": "array",
"items": {
"enum": [
"monthly_subscription",
"annual_subscription",
"pay_as_you_go",
"prepaid_credits"
],
"type": "string"
},
"minItems": 1,
"description": "Acceptable billing: monthly_subscription (A plan with a fixed fee (or minimum commitment) billed every month.) annual_subscription (A plan paid for a year at a time.) pay_as_you_go (No plan fee; a price per unit of use, billed after use or drawn from a balance topped up with any amount.) prepaid_credits (Money paid before use: a credit pack, a balance topped up first, or a plan amount charged in advance for the period.) Free plans always qualify.",
"uniqueItems": true
},
"monthly_pages": {
"type": "object",
"properties": {
"javascript": {
"type": "integer",
"minimum": 0
},
"plain_html": {
"type": "integer",
"minimum": 0
},
"premium_proxy": {
"type": "integer",
"minimum": 0
},
"javascript_premium_proxy": {
"type": "integer",
"minimum": 0
}
},
"description": "Pages per month by type: plain_html (static pages), javascript (needs rendering), premium_proxy (blocked sites that need residential/premium proxies), javascript_premium_proxy (both).",
"minProperties": 1,
"additionalProperties": false
},
"needs_inbound": {
"type": "boolean",
"description": "The service must receive email for the buyer and hand it on (inbound parsing, routes), for transactional email."
},
"product_types": {
"type": "array",
"items": {
"enum": [
"scraping_api",
"serp_api",
"headless_browser",
"platform",
"email_api",
"tts_api",
"stt_api",
"docparse_api"
],
"type": "string"
},
"minItems": 1,
"description": "Limit to these product types. Default: every type that can serve the workload.",
"uniqueItems": true
},
"monthly_emails": {
"type": "number",
"description": "Emails sent per month, for transactional email APIs (SendGrid, Mailgun, Postmark, Resend, Amazon SES, Brevo, Mailtrap, Loops). It is the whole workload: give it instead of monthly_pages, monthly_searches and monthly_browser_hours, not with them. Only email products can serve it; other products are out of scope.",
"exclusiveMinimum": 0
},
"search_engines": {
"type": "array",
"items": {
"enum": [
"google",
"bing",
"yahoo",
"yandex",
"baidu",
"duckduckgo",
"naver",
"brave"
],
"type": "string"
},
"minItems": 1,
"description": "Search engines whose results the plan must return, each at the plan's search price: google, bing, yahoo, yandex, baidu, duckduckgo, naver, brave (brave is Brave's own index). monthly_searches is the total over all of them.",
"uniqueItems": true
},
"captcha_solving": {
"type": "boolean",
"description": "The plan must solve CAPTCHAs for the browser sessions (the vendor does it, not the buyer own service)."
},
"min_concurrency": {
"type": "integer",
"minimum": 1,
"description": "Minimum number of concurrent requests (or browsers) the plan must allow."
},
"needs_streaming": {
"type": "boolean",
"description": "The service must return audio in real time as it is made (streaming or a WebSocket), for text-to-speech; for speech-to-text, it must transcribe live audio as it arrives. A speech-to-text price line is per mode, so a plan priced for recorded audio only is not met."
},
"monthly_searches": {
"type": "integer",
"minimum": 0,
"description": "Search requests per month (one results page each)."
},
"needs_remote_mcp": {
"type": "boolean",
"description": "The provider must host a remote MCP endpoint (a URL an MCP client connects to). An official server that can only be run on the buyer own machine does not meet it."
},
"proxies_included": {
"type": "boolean",
"description": "The plan must include proxy traffic of the vendor (some gigabytes in the plan fee). Proxy traffic sold only per gigabyte on top of the fee, or only on another plan, does not count."
},
"search_countries": {
"type": "array",
"items": {
"type": "string",
"pattern": "^[A-Z]{2}$"
},
"minItems": 1,
"description": "ISO 3166-1 alpha-2 codes of the countries whose search results the searches must return (the search engine's country setting, e.g. Google gl), e.g. [\"GB\",\"CA\"]. Different from exit_ip_countries.",
"uniqueItems": true
},
"exit_ip_countries": {
"type": "array",
"items": {
"type": "string",
"pattern": "^[A-Z]{2}$"
},
"minItems": 1,
"description": "ISO 3166-1 alpha-2 codes of countries the page requests must exit from, e.g. [\"US\",\"DE\"]. For search results of a country use search_countries.",
"uniqueItems": true
},
"min_pages_per_doc": {
"type": "integer",
"minimum": 1,
"description": "Pages one document may have at the most the plan allows, for document parsing. Met when the stated limit is at least this many (or the pages say there is no page limit); a plan whose pages do not state a limit is unknown. The limit of the largest way of sending (batch or asynchronous) counts."
},
"needs_diarization": {
"type": "boolean",
"description": "The plan must label who spoke (speaker diarization), for speech-to-text. Where the vendor charges extra for it, the extra price is added to the monthly cost; where the pages state no price or no inclusion the plan is unknown."
},
"needs_no_training": {
"type": "boolean",
"description": "An official page must say the vendor does not use the buyer's text, audio or documents to train its models without the buyer opting in. A use that is on by default with an opt-out to ask for does not count."
},
"session_recording": {
"type": "boolean",
"description": "The plan must record browser sessions (video or replay) that the buyer can watch afterwards."
},
"monthly_characters": {
"type": "number",
"description": "Characters of text voiced per month, for text-to-speech APIs (ElevenLabs, Cartesia, Deepgram Aura, OpenAI, Google Cloud, Amazon Polly, Azure, Gradium, Rime, Inworld, MiniMax, Murf, Hume). It is the whole workload: give it instead of monthly_pages, monthly_searches, monthly_browser_hours and monthly_emails, not with them. Only text-to-speech products can serve it; other products are out of scope.",
"exclusiveMinimum": 0
},
"needs_dedicated_ip": {
"type": "boolean",
"description": "The plan must come with a dedicated sending IP address, for transactional email. A dedicated IP sold only as an add-on on top of the plan, or only on another plan, does not count."
},
"needs_official_mcp": {
"type": "boolean",
"description": "The provider must publish its own MCP server (hosted by it or run by the buyer), stated in its official documentation. A server only a third party published does not count."
},
"ai_extraction_pages": {
"type": "integer",
"minimum": 0,
"description": "How many of the pages need their fields extracted by an AI model (from a prompt or a schema, or automatically) without writing selectors. Each page counts in one of the two extraction fields."
},
"min_pages_per_crawl": {
"type": "integer",
"minimum": 1,
"description": "Pages one crawl job (from one start URL, following links) must be able to reach. A plan whose crawl has no page cap meets any number; give the size of the largest site to crawl. Different from the monthly page total."
},
"min_sending_domains": {
"type": "integer",
"minimum": 1,
"description": "Sending domains the plan must let one account authenticate, for transactional email. Met when the stated limit is at least this many (or the pages say it is unlimited); a plan whose pages do not state a limit is unknown."
},
"min_session_minutes": {
"type": "number",
"description": "Minutes one browser session must be able to run on this plan, for hosted browsers. Met when the stated longest session of the plan is at least this long; a plan whose pages do not state a session limit is unknown, and a limit the page gives only for another plan is not met.",
"exclusiveMinimum": 0
},
"monthly_audio_hours": {
"type": "number",
"description": "Hours of audio transcribed per month, for speech-to-text APIs (Deepgram, AssemblyAI, Speechmatics, Amazon Transcribe, Google Cloud, OpenAI). A price given per minute is multiplied by 60. It is the whole workload: give it instead of monthly_pages, monthly_searches, monthly_browser_hours, monthly_emails and monthly_characters, not with them. Only speech-to-text products can serve it; other products are out of scope.",
"exclusiveMinimum": 0
},
"monthly_pages_total": {
"type": "integer",
"minimum": 0,
"description": "Total pages per month when the split by type is not known yet. Costs and verdicts then cover every share of JavaScript-rendered pages from 0% to 100% of the total (no premium proxies), and the result lists monthly_pages under needs_input."
},
"needs_voice_cloning": {
"type": "boolean",
"description": "The plan must let the account clone a voice from its own recording, for text-to-speech. Cloning limited to eligible customers, a request form or an enterprise plan does not count for a plan that is not that plan."
},
"persistent_profiles": {
"type": "boolean",
"description": "The plan must keep browser profiles (login state, cookies) between sessions."
},
"search_result_types": {
"type": "array",
"items": {
"enum": [
"organic",
"ads",
"local_pack",
"knowledge_graph",
"people_also_ask",
"related_searches",
"shopping",
"news",
"images",
"videos",
"ai_overview"
],
"type": "string"
},
"minItems": 1,
"description": "Result types the parsed search response must contain: organic, ads, local_pack, knowledge_graph, people_also_ask, related_searches, shopping, news, images, videos, ai_overview.",
"uniqueItems": true
},
"max_monthly_cost_usd": {
"type": "number",
"minimum": 0,
"description": "Monthly budget in USD before tax. Compared with listed prices; annual plans use their per-month equivalent."
},
"needs_batch_discount": {
"type": "boolean",
"description": "An official page must say a batch or asynchronous way of sending documents costs less than the list price on the plan, for document parsing. The budget and the cost are judged at the list price, not at the batch price."
},
"needs_commercial_use": {
"type": "boolean",
"description": "The plan must allow commercial use of the generated audio, for text-to-speech. A free plan limited to non-commercial use does not count; a plan whose pages do not say is unknown."
},
"needs_no_min_billing": {
"type": "boolean",
"description": "An official page must say audio is billed by the second (or an increment of seconds) with no minimum billed duration per request, for speech-to-text. A page that says nothing about rounding is unknown."
},
"monthly_browser_hours": {
"type": "number",
"description": "Browser time per month in hours, for hosted browsers (Browserbase, Browserless) billed by browser time. It is the whole workload: give it instead of monthly_pages, monthly_searches and browser_seconds_per_page, not with them. Only browser products can serve it; other products are out of scope.",
"exclusiveMinimum": 0
},
"max_overage_usd_per_1k": {
"type": "number",
"minimum": 0,
"description": "The most the plan may charge for each 1,000 emails beyond its included volume, in USD, for transactional email. A plan whose extra price is not published as a per-1,000 figure is unknown."
},
"min_log_retention_days": {
"type": "integer",
"minimum": 1,
"description": "Days the plan must keep the logs or events of sent email where the account can read them, for transactional email. Longer retention sold as an add-on does not count."
},
"monthly_document_pages": {
"type": "number",
"description": "Pages of documents parsed per month, for document-parsing APIs (LlamaParse, Reducto, Unstructured, Mistral OCR, LandingAI, Amazon Textract, Google Document AI, Azure Document Intelligence, Datalab, Mathpix, Mindee, Nanonets, Upstage). A price given per credit is multiplied by the credits one page costs. It is the whole workload: give it instead of monthly_pages, monthly_searches, monthly_browser_hours, monthly_emails, monthly_characters and monthly_audio_hours, not with them. Only document-parsing products can serve it; other products are out of scope.",
"exclusiveMinimum": 0
},
"needs_table_extraction": {
"type": "boolean",
"description": "The service must return the tables of a page as structure (rows and cells), not only the text, for document parsing."
},
"search_returns_content": {
"type": "boolean",
"description": "The search response itself must carry the text of the result pages (extracted content), not only titles, links and snippets."
},
"min_requests_per_minute": {
"type": "number",
"description": "Minimum request rate the plan must allow, per minute.",
"exclusiveMinimum": 0
},
"browser_seconds_per_page": {
"type": "number",
"description": "Browser time per page in seconds, for headless-browser products billed by time. Every plan must then serve pages that take this long: a hosted browser does, a request-based API only when one request may run that long.",
"exclusiveMinimum": 0
},
"realtime_search_required": {
"type": "boolean",
"description": "Search results must be returned in real time (not through a queue)."
},
"target_errors_not_billed": {
"type": "boolean",
"description": "Error responses from the target site (e.g. 404) must not be billed."
},
"needs_recurring_free_tier": {
"type": "boolean",
"description": "The plan must be usable every month without paying (a free plan with a monthly allowance or a monthly free credit)."
},
"failed_requests_not_billed": {
"type": "boolean",
"description": "Requests that fail on the provider side (timeouts, blocks, 5xx) must not be billed. A flat monthly price for unlimited requests meets it, since no request is billed on its own; when only success-based billing will do, use only_successful_requests_billed."
},
"structured_extraction_pages": {
"type": "integer",
"minimum": 0,
"description": "How many of the pages must come back as JSON fields rather than HTML or text, by any method the plan offers (CSS or XPath selectors, a schema, or AI). When the fields must be found without writing selectors, use ai_extraction_pages instead; each page counts in one of the two."
},
"only_successful_requests_billed": {
"type": "boolean",
"description": "Billing must count successful requests only: each successful request is charged (or draws credits) and failed ones cost nothing. A flat monthly price for unlimited requests does not meet it, since the price is the same whatever succeeds."
}
},
"description": "The user's workload and required conditions as you understood them, in the search input format. Each claim is judged against these, not against earlier calls.",
"additionalProperties": false
},
"question": {
"type": "string",
"maxLength": 4000,
"description": "The user's words, if available. Read only for words that suggest a condition the request does not carry."
}
},
"additionalProperties": false
}