Price intelligence infrastructure for developers

Apify vs PricesAPI

Run a maintained ecommerce Actor for Shopping sellers, or read stored offers and recorded 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

This comparison covers E-commerce Scraping Tool, maintained by Apify, with Google Listing, Products, Reviews and Sellers modes. Choose it for fresh collection and reusable datasets; choose PricesAPI for retained exact-product reads where history coverage exists.

Official-source facts

Reviewed 2026-09-22. Competitor facts below come from these official sources; PricesAPI facts come from our API documentation and pricing rules. Documented fields do not establish coverage, accuracy or performance for your products. We have not run a paid head-to-head benchmark.

FeaturePricesAPIApify
Free accessFree, one-time: 300 Searches with merchant offers (3,000 credits); 6 rpmFREE-tier event prices are published for this Actor; free-tier membership does not make every run unmetered. No trial allowance was tested.
Paid access$49/month: 3,000 Searches with merchant offers (30,000 credits); 20 rpmActor event prices vary by tier and collection mode. Select this Actor's current pricing; a generic platform or community-Actor price is not a seller-job quote.
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.Google modes use searchEngineKeyword, scrapeModeSearchEngine, countryCode and optional city/region. Retailer detail jobs use detailsUrls. A name or URL is not a canonical cross-retailer variant ID.
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.The README seller example has merchantName, string price, url and shipping text. Complete variant, condition and shipping-amount schemas are not established. Output differs by mode.
CurrencySnapshot and History currency is inferred from the requested market, such as USD for market=us. Compare item prices within the same market.Retailer examples use offers.price and priceCurrency, sometimes null. The seller example uses display-price strings; an ISO code per seller is not established there.
FreshnessSnapshot exposes observation time, age and stale state. Reading it does not request a fresh scrape or prove a seller's current price.The Actor captures current page data on each run. Build 0.0.99 was published September 21; that proves maintenance, not successful extraction. Per-offer observation timestamps were not established.
HistoryRead retained observations for a window with explicit coverage. Leave missing days as gaps; depth varies by exact product and market.This Actor's FAQ explicitly says it cannot scrape historical prices. Schedules and saved datasets build your own history from collection onward; this is not a claim about every Apify Actor.
Pagination and asyncSnapshot: up to 60 offers, truncation flag, no offer cursor. History has bound cursors; Batch reads products and Async Bulk Search runs discovery jobs.Run asynchronously, then read defaultDatasetId with offset/limit. Limit products and sellers in Actor input. Dataset paging is not upstream search paging; sync results wait at most 300 seconds.
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.Actor start, listing/search page, product detail and enrichment events differ. Seller events have their own metadata. Do not assume one dataset row equals one charge; no settlement was tested.
FailuresDistinguish 404 unknown identity, 403 balance, 409 expired History cursor and 429 with Retry-After. Restarting an expired walk can bill again.Inspect run status: SUCCEEDED, FAILED, TIMED-OUT or ABORTED. Sync can return 408 run-timeout-exceeded. A successful run does not guarantee every requested product or field was extracted.
Feature
Free access
PricesAPI
Free, one-time: 300 Searches with merchant offers (3,000 credits); 6 rpm
Apify
FREE-tier event prices are published for this Actor; free-tier membership does not make every run unmetered. No trial allowance was tested.
Feature
Paid access
PricesAPI
$49/month: 3,000 Searches with merchant offers (30,000 credits); 20 rpm
Apify
Actor event prices vary by tier and collection mode. Select this Actor's current pricing; a generic platform or community-Actor price is not a seller-job quote.
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.
Apify
Google modes use searchEngineKeyword, scrapeModeSearchEngine, countryCode and optional city/region. Retailer detail jobs use detailsUrls. A name or URL is not a canonical cross-retailer variant ID.
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.
Apify
The README seller example has merchantName, string price, url and shipping text. Complete variant, condition and shipping-amount schemas are not established. Output differs by mode.
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.
Apify
Retailer examples use offers.price and priceCurrency, sometimes null. The seller example uses display-price strings; an ISO code per seller is not established there.
Feature
Freshness
PricesAPI
Snapshot exposes observation time, age and stale state. Reading it does not request a fresh scrape or prove a seller's current price.
Apify
The Actor captures current page data on each run. Build 0.0.99 was published September 21; that proves maintenance, not successful extraction. Per-offer observation timestamps were not established.
Feature
History
PricesAPI
Read retained observations for a window with explicit coverage. Leave missing days as gaps; depth varies by exact product and market.
Apify
This Actor's FAQ explicitly says it cannot scrape historical prices. Schedules and saved datasets build your own history from collection onward; this is not a claim about every Apify Actor.
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 runs discovery jobs.
Apify
Run asynchronously, then read defaultDatasetId with offset/limit. Limit products and sellers in Actor input. Dataset paging is not upstream search paging; sync results wait at most 300 seconds.
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.
Apify
Actor start, listing/search page, product detail and enrichment events differ. Seller events have their own metadata. Do not assume one dataset row equals one charge; no settlement was tested.
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.
Apify
Inspect run status: SUCCEEDED, FAILED, TIMED-OUT or ABORTED. Sync can return 408 run-timeout-exceeded. A successful run does not guarantee every requested product or field was extracted.

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 observations from before your app started tracking a product, where retained coverage exists.
  • You prefer an exact product-and-market read contract and can handle unknown shipping, market-inferred currency and sparse history.

Choose Apify when

  • You need a maintained first-party Actor with Google seller discovery and retailer URL collection modes.
  • You want schedules, datasets and flexible collection workflows, and can validate mode-specific output and event charges.

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 Apify Google Sellers · illustrative, not executedDocumentation: Current Actor input schema
Illustrative, not executed. Current input schema; README-derived seller projection.
POST https://api.apify.com/v2/acts/apify~e-commerce-scraping-tool/runs
Authorization: Bearer YOUR_APIFY_TOKEN
Content-Type: application/json

Request body:
{
  "searchEngineKeyword": "noise cancelling headphones",
  "scrapeModeSearchEngine": "Sellers",
  "countryCode": "au",
  "citySearchEngine": "Sydney",
  "regionSearchEngine": "New South Wales",
  "maxSearchEngineProducts": 5,
  "maxSearchEngineSellersPerProduct": 5,
  "maxSearchEngineResults": 25
}

Run fragment:
{ "data": { "id": "EXAMPLE_RUN", "defaultDatasetId": "EXAMPLE_DATASET" } }

Poll the run; retrieve items after completion:
GET https://api.apify.com/v2/actor-runs/EXAMPLE_RUN
GET https://api.apify.com/v2/datasets/EXAMPLE_DATASET/items?format=json&offset=0&limit=25

Invented amounts; README output shape, not build-validated output.
The published OpenAPI does not define a complete dataset-item schema.
Response fragment:
[
  {
    "product": { "title": "Example headphones", "price": "A$179.00" },
    "sellers": [{
      "merchantName": "Example Shop",
      "price": "A$179.00",
      "url": "https://shop.example/headphones",
      "shipping": "Free shipping"
    }]
  }
]

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.