Price intelligence infrastructure for developers

Oxylabs vs PricesAPI

Follow Shopping results to seller prices and delivery, or read stored offers and observed price history.

Use PricesAPI data to build price comparisons and history views. Coverage varies by product and market; your application handles analysis and pricing decisions.

TL;DR · PricesAPI assessment

Oxylabs fits apps that need localized Google Shopping search, variant information and seller-level shipping and condition fields. PricesAPI fits retained seller comparisons and history charts for a selected product and market.

FeaturePricesAPIOxylabs
Free accessFree, one-time: 300 Searches with merchant offers (3,000 credits); 6 rpmTrial: up to 2,000 results, no credit card required. Trial extraction was not tested here.
Paid access$49/month: 3,000 Searches with merchant offers (30,000 credits); 20 rpmMicro: $49/month; rendered results $1.35/1,000. The advertised 98,000 maximum uses a cheaper target rate, not rendered Shopping.
Identity and marketKnown IDs skip discovery: send id, id_type (pricesapi or catalog), and market directly to Snapshot or History. Free Catalog text search finds candidate products. Name matches do not confirm physical variants, and Catalog summaries do not prove History availability. A cluster is not an exact product ID.Search uses query, geo_location, locale and price/sort context. Follow the returned token, not product_id, to product details. Tokens embed locale; unknown location text can silently lose targeting.
Seller offers and deliverySnapshot provides seller IDs and URLs. Snapshot and History have no numeric shipping field: price is the item price; delivery_info is seller delivery text (null means unknown, not free). Delivery depends on the buyer's location. Condition is not published on either retained read.pricing.online includes seller, seller_link, price, price_shipping and condition; variants is documented. These fields support comparison, not a guaranteed address- and tax-specific checkout total.
CurrencySnapshot and History currency is inferred from the requested market, such as USD for market=us. Compare item prices within the same market.Search cards and product seller offers document currency alongside numeric price. Currency provenance and cross-market accuracy were not tested.
FreshnessSearch no_cache=true bypasses stored results but may share an in-flight collection. Snapshot is a retained read: it does not trigger a fresh scrape. Inspect observation time and stale state; neither operation confirms the seller's current checkout price.Realtime means synchronous delivery. Shopping result created_at and updated_at describe job creation and completion, not the seller's last price change. The reviewed Shopping contracts establish no cache-bypass control.
HistoryRead retained offers for a window with explicit coverage; leave missing days as gaps. Available depth varies by product and market.These Shopping endpoints do not document a pre-existing price-history window. Push-Pull retains completed results for at least 24 hours; Scheduler can build your own future collections.
Pagination and asyncSnapshot: up to 60 offers, truncation flag, no offer cursor. History has bound cursors; Batch reads products and Async Bulk Search submits discovery jobs.Search has start_page/pages. Push-Pull runs asynchronously, supports callbacks and batches up to 5,000 query/URL values. Each becomes a separate job; product follow-ups are separate work.
Billing unitSearch Products: 10 credits per response with at least one merchant offer; Product Snapshot: 1 credit per product; Price History: 1 credit per day with recorded offers. History reserves requested days, then refunds days without offers; valid continuations add no charge. A known-product Snapshot with no offers still bills.Retrieved pages/results, not product cards. Rendered search plus one rendered product follow-up is two results. Compare that job, not the unrendered single-page rate.
FailuresDistinguish 404 unknown identity, 403 balance, 409 expired History cursor and 429 with Retry-After. Restarting an expired walk can bill again.Check HTTP, job status and parse_status_code: 12000 means parsed successfully. HTTP 204 means not ready. Target 2xx/4xx can bill even without useful content; 429 and system failures are excluded.
Feature
Free access
PricesAPI
Free, one-time: 300 Searches with merchant offers (3,000 credits); 6 rpm
Oxylabs
Trial: up to 2,000 results, no credit card required. Trial extraction was not tested here.
Feature
Paid access
PricesAPI
$49/month: 3,000 Searches with merchant offers (30,000 credits); 20 rpm
Oxylabs
Micro: $49/month; rendered results $1.35/1,000. The advertised 98,000 maximum uses a cheaper target rate, not rendered Shopping.
Feature
Identity and market
PricesAPI
Known IDs skip discovery: send id, id_type (pricesapi or catalog), and market directly to Snapshot or History. Free Catalog text search finds candidate products. Name matches do not confirm physical variants, and Catalog summaries do not prove History availability. A cluster is not an exact product ID.
Oxylabs
Search uses query, geo_location, locale and price/sort context. Follow the returned token, not product_id, to product details. Tokens embed locale; unknown location text can silently lose targeting.
Feature
Seller offers and delivery
PricesAPI
Snapshot provides seller IDs and URLs. Snapshot and History have no numeric shipping field: price is the item price; delivery_info is seller delivery text (null means unknown, not free). Delivery depends on the buyer's location. Condition is not published on either retained read.
Oxylabs
pricing.online includes seller, seller_link, price, price_shipping and condition; variants is documented. These fields support comparison, not a guaranteed address- and tax-specific checkout total.
Feature
Currency
PricesAPI
Snapshot and History currency is inferred from the requested market, such as USD for market=us. Compare item prices within the same market.
Oxylabs
Search cards and product seller offers document currency alongside numeric price. Currency provenance and cross-market accuracy were not tested.
Feature
Freshness
PricesAPI
Search no_cache=true bypasses stored results but may share an in-flight collection. Snapshot is a retained read: it does not trigger a fresh scrape. Inspect observation time and stale state; neither operation confirms the seller's current checkout price.
Oxylabs
Realtime means synchronous delivery. Shopping result created_at and updated_at describe job creation and completion, not the seller's last price change. The reviewed Shopping contracts establish no cache-bypass control.
Feature
History
PricesAPI
Read retained offers for a window with explicit coverage; leave missing days as gaps. Available depth varies by product and market.
Oxylabs
These Shopping endpoints do not document a pre-existing price-history window. Push-Pull retains completed results for at least 24 hours; Scheduler can build your own future collections.
Feature
Pagination and async
PricesAPI
Snapshot: up to 60 offers, truncation flag, no offer cursor. History has bound cursors; Batch reads products and Async Bulk Search submits discovery jobs.
Oxylabs
Search has start_page/pages. Push-Pull runs asynchronously, supports callbacks and batches up to 5,000 query/URL values. Each becomes a separate job; product follow-ups are separate work.
Feature
Billing unit
PricesAPI
Search Products: 10 credits per response with at least one merchant offer; Product Snapshot: 1 credit per product; Price History: 1 credit per day with recorded offers. History reserves requested days, then refunds days without offers; valid continuations add no charge. A known-product Snapshot with no offers still bills.
Oxylabs
Retrieved pages/results, not product cards. Rendered search plus one rendered product follow-up is two results. Compare that job, not the unrendered single-page rate.
Feature
Failures
PricesAPI
Distinguish 404 unknown identity, 403 balance, 409 expired History cursor and 429 with Retry-After. Restarting an expired walk can bill again.
Oxylabs
Check HTTP, job status and parse_status_code: 12000 means parsed successfully. HTTP 204 means not ready. Target 2xx/4xx can bill even without useful content; 429 and system failures are excluded.

Credits, searches and extracted records are different billing units. Compare the work each request does, not just the number included in a plan. The recommendations below are our assessment.

Choice guide · PricesAPI assessment

Choose PricesAPI when

  • You need stored offers and recorded history without collecting every observation yourself, where coverage exists.
  • You want item prices and seller delivery text for a selected product and market, with explicit history coverage and gaps.

Choose Oxylabs when

  • You need localized Shopping search, sort/price controls, and documented seller shipping and condition fields.
  • You want on-demand rendered product pages or cron collection, and can manage token follow-ups, parser status and your own history.

Response shape

Product Search API returns matched products with available merchant offers inline. Carry a result’s product_ref into Snapshot or History; free product lookup is another starting point. Both examples are illustrative and based on the linked contracts; values are not live measurements or current commercial data.

Illustrative PricesAPI response shapeDocumentation: PricesAPI OpenAPI
GET /api/v1/products/search?q=Sony%20WH-1000XM5&market=us

{
  "success": true,
  "data": {
    "query": "Sony WH-1000XM5",
    "market": "us",
    "products": [{
      "position": 1,
      "pid": 100569554,
      "product_ref": { "id": "100569554", "id_type": "pricesapi", "market": "us" },
      "cluster_id": "123456789",
      "catalog_id": "987654321",
      "title": "Sony WH-1000XM5 Wireless Headphones",
      "image": "https://example.com/headphones.jpg",
      "headline_price": 348,
      "headline_currency": "USD",
      "condition_label": null,
      "source": "Amazon.com",
      "multi_store": true,
      "rating": 4.7,
      "reviews": 8523,
      "delivery": "Free delivery",
      "tags": [],
      "nearby_distance_km": null,
      "offers": [{
        "seller": "Amazon.com",
        "seller_url": "https://amazon.com",
        "price": 348,
        "currency": "USD",
        "product_title": "Sony WH-1000XM5",
        "stock_status": "In stock",
        "delivery_info": "Free delivery",
        "url": "https://example.com/product"
      }],
      "offerCount": 1
    }]
  },
  "meta": { "latency_ms": 842, "raw_count": 3, "gid_bearing_count": 2 }
}

Carry product_ref.id, id_type and market to the read you need:
GET /api/v1/products?id=100569554&id_type=pricesapi&market=us
GET /api/v1/products/history?id=100569554&id_type=pricesapi&market=us&from=2026-09-01&to=2026-09-07

Already have a catalog ID? Skip discovery and choose one read:
Snapshot:
GET /api/v1/products?id=987654321&id_type=catalog&market=us
History (no Snapshot request needed):
GET /api/v1/products/history?id=987654321&id_type=catalog&market=us&from=2026-09-01&to=2026-09-07

Snapshot: inspect observation and offers_page.truncated.
History: inspect coverage and follow page.next_cursor with the same parameters.
Null product_ref means no usable product identity; do not substitute cluster_id.
Illustrative Oxylabs Shopping → sellers · illustrative, not executedDocumentation: Shopping product schema
Illustrative, not executed. Invented values; parsed-content projection.
POST https://realtime.oxylabs.io/v1/queries
Authorization: Basic BASE64_USERNAME_PASSWORD
Content-Type: application/json

Search body:
{
  "source": "google_shopping_search",
  "query": "noise cancelling headphones",
  "geo_location": "Australia",
  "locale": "en-AU",
  "render": "html",
  "parse": true,
  "pages": 1
}

Select the intended variant; copy its returned token.
POST the following to the same endpoint; keep the token's locale.
Product body:
{
  "source": "google_shopping_product",
  "query": "TOKEN_FROM_SELECTED_CARD",
  "render": "html",
  "parse": true
}

Parsed content only; transport/job metadata omitted.
Response fragment:
{
  "title": "Example headphones",
  "pricing": {
    "online": [{
      "seller": "Example Shop",
      "seller_link": "https://shop.example/headphones",
      "price": 179,
      "currency": "AUD",
      "price_shipping": 9.5,
      "condition": "New",
      "details": "Delivery estimate shown by Google"
    }]
  },
  "variants": [],
  "parse_status_code": 12000
}

Try the Product Search API

3,000 free credits, granted once. That covers 300 Searches returning at least one merchant offer at 10 credits each. Searches with no products or no merchant offers, and failed requests, cost nothing. Snapshot and History use different billing units.

Need more? Developer is $49/month for 30,000 credits, with a limit of 20 requests per minute.