FindcheapFindcheap
Developers

Findcheap API

The Findcheap API has 3 endpoints:

  1. Search — takes structured product data as input and returns up to 10 matching products with lower prices.
  2. Extract — takes a product page URL as input and returns structured product data from the page.
  3. Search URL — simply a combination of the extract and search endpoints, to enable searching with a product page URL as input. It first calls extract to get product data, then uses the resulting product data to search.

There are two ways to integrate:

  • REST API — call the API from your own code using HTTPS requests.
  • MCP — a Model Context Protocol server that gives Claude, ChatGPT, and any MCP-compatible agent the ability to search for products and extract product data, with no integration code.

Both surfaces share the same API keys, credits, and rate limits.

Authentication

Every request you send must carry an API key, which you can create from the developer dashboard. Keys begin with fc_live_….

Send the key in the Authorization header — a header is a line of metadata that rides along with an HTTP request, separate from its body:

HTTP header
Authorization: Bearer fc_live_xxxxxxxxxxxxxxxx

For quick tests, a token query parameter is also accepted (?token=fc_live_…). Use the header in anything you ship — query strings end up in server logs.

Quickstart

Every Findcheap call has the same simple shape: your code sends an HTTPS POST request (the same mechanism a browser uses to submit a form) to an endpoint URL, carrying your API key in a header and a small JSON body that says what to search. Findcheap answers with JSON.

Here’s a complete first call — finding cheaper alternatives from nothing but a product page URL:

# One complete search. -H adds a header (your key,
# then the body's format); -d is the JSON body.
curl https://api.findcheap.ai/v1/search_url \
  -H "Authorization: Bearer $FINDCHEAP_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"url": "https://www.amazon.com/dp/B0BTYCRJSS"}'

That’s the whole integration — there is no step two. A typical response (trimmed to two results):

200 OK
{
  "results": [
    {
      "title": "Stanley Quencher H2.0 FlowState Tumbler, 40 oz",
      "price": 27.99,
      "currency": "USD",
      "url": "https://www.walmart.com/ip/...",
      "image": "https://i5.walmartimages.com/...",
      "marketplace": "Walmart",
      "rating": 4.8,
      "ratings_count": 11204
    },
    {
      "title": "Stanley 40oz Quencher H2.0 Tumbler",
      "price": 29.50,
      "currency": "USD",
      "url": "https://www.ebay.com/itm/...",
      "image": "https://i.ebayimg.com/...",
      "marketplace": "eBay",
      "rating": null,
      "ratings_count": null
    }
  ],
  "result_count": 10
}

Search URL

POST/v1/search_url

Finds matching products with lower prices from nothing but a product page URL. Under the hood this chains the other two endpoints: Extract pulls the product’s title, image, price, and brand from the page, then Search runs on that data. One call, one response. Billed the same as 1 /extract and 1 /search call.

Request body

url
string · required

The product page URL. Returns a 422 when the page isn’t a product page, and a 502 when it couldn’t be fetched.

…search options
optional

All Search options are accepted and passed through: marketplaces, exact_brand, condition, and market. The product facts themselves (title, image_url, price, brand) come from the page — they can’t be overridden here; call Search directly if you want to supply your own.

Response

Identical to Search — up to 10 matching products, ordered by deal quality.

Extract

POST/v1/extract

Extracts structured product data from any product page URL — the same extraction stage that powers Search, exposed standalone. Useful when you want the product’s identity without running a full search.

Request body

url
string · required

The page to extract from.

Response

200 OK
{
  "is_product_page": true,
  "title": "Stanley Quencher H2.0 FlowState Tumbler, 40 oz",
  "price": 35.00,
  "currency": "USD",
  "image": "https://m.media-amazon.com/images/I/...",
  "brand": "Stanley",
  "in_stock": true
}

When the URL isn’t a product page (a homepage, a category listing, an article), is_product_page is false and the remaining fields are null. price can be null on genuine product pages too — treat title and image as the reliable core. price is the page’s standing purchase price: the price any shopper pays, not first-order, coupon, or membership prices.

in_stock is true when the page says the product is currently purchasable, false when it’s out of stock or discontinued, and null when availability couldn’t be determined from the page.

Errors

Errors use conventional HTTP status codes with a JSON body:

Error shape
{
  "error": {
    "type": "invalid_request",
    "message": "title and image_url are required."
  }
}
StatusTypeMeaning
400invalid_requestMalformed body or missing required fields.
401authentication_errorMissing or invalid API key.
402insufficient_creditsYour credit balance is exhausted. Top up or upgrade from the dashboard.
403refusedThe search was refused for safety — e.g. a used-condition search on grocery or consumable products.
422not_searchableThe input couldn't be searched: the URL isn't a product page, or exact_brand was set and no brand could be determined.
429rate_limitedToo many requests. Honor the Retry-After header.
502upstream_unreachableThe target page couldn't be fetched — the site blocked the request or didn't respond. A retry may succeed.
5xxapi_errorSomething failed on our side. Safe to retry with backoff.

Failed requests are never billed.

MCP server

Findcheap runs a hosted Model Context Protocol server, so agents can use Findcheap without any integration code. It speaks Streamable HTTP and authenticates with the same API keys as the REST API:

Server URL
https://mcp.findcheap.ai/mcp

MCP tool calls are billed identically to the endpoint they wrap — there’s no separate MCP pricing.

Tools

find_cheaper_products
wraps /v1/search + /v1/search_url

Finds matching products with lower prices. Takes a product URL (routed through Search URL) or a title + image (routed through Search), plus optional marketplaces, exact_brand, condition, and market. Returns the ranked listings with prices, links, and ratings.

extract_product
wraps /v1/extract

Extracts structured product data (title, price, image, brand, stock status) from a product page URL — the same contract as Extract.

Client setup

Any MCP client that supports remote servers works. Two common setups:

// Works with Claude Code, Cursor, and any client that reads .mcp.json
{
  "mcpServers": {
    "findcheap": {
      "type": "http",
      "url": "https://mcp.findcheap.ai/mcp",
      "headers": {
        "Authorization": "Bearer fc_live_..."
      }
    }
  }
}

Once connected, the agent sees both tools and their schemas automatically. A prompt like “find this tumbler cheaper: <url>” is enough — the agent calls find_cheaper_products and works with the returned listings.

Building for end users? You can earn a share of affiliate revenue from purchases made through results you surface through Findcheap’s revenue sharing program. Reach out for more info.