Skip to content

Merchant API Fresh

Merchant API provides reliable e-commerce data for competitive price monitoring, product research, and market niche analysis. It returns product listings, prices, seller data, and detailed product specifications from the top two e-commerce search engines: Google Shopping and Amazon.

Results are location-accurate — DataForSEO emulates the specified location and language with high precision, so data matches what actual users see in that market.

All Endpoints (26 total)

Google Shopping (11 endpoints across 4 sub-groups)

Sub-GroupEndpointsWhat It Returns
Google Shopping — Products4Product listing data: names, prices, sellers, ratings
Google Shopping — Sellers4Seller listings for a specific product
Google Shopping — Product Info3Detailed product specification pages
Google Shopping — Reviews3Product reviews from Google Shopping

Amazon (15 endpoints across 3 sub-groups)

Sub-GroupEndpointsWhat It Returns
Amazon — Products4Organic and paid Amazon product listings
Amazon — ASIN4Specific product detail data with all ASIN variants
Amazon — Sellers4Seller profiles and listings

Quick Endpoint Reference

EndpointMethodDescription
/v3/merchant/google/products/task_postPOSTQueue Google Shopping search
/v3/merchant/google/products/tasks_readyGETGet completed product tasks
/v3/merchant/google/products/task_get/{id}/advancedGETRetrieve product SERP data
/v3/merchant/google/sellers/task_postPOSTQueue seller search for a product
/v3/merchant/google/product_info/task_postPOSTQueue product specification page task
/v3/merchant/google/product_spec/task_postPOSTQueue product spec detail task
/v3/merchant/google/product_reviews/task_postPOSTQueue product reviews task
/v3/merchant/amazon/products/task_postPOSTQueue Amazon product search
/v3/merchant/amazon/products/tasks_readyGETGet completed Amazon tasks
/v3/merchant/amazon/products/task_get/{id}/advancedGETRetrieve Amazon product results
/v3/merchant/amazon/asin/task_postPOSTQueue ASIN-level detail task
/v3/merchant/amazon/asin/task_get/{id}/advancedGETRetrieve ASIN data
/v3/merchant/amazon/sellers/task_postPOSTQueue seller data task

What It Covers

PlatformData available
Google ShoppingProduct listing data, product specification pages, prices, seller listings, full advertised product URLs with all parameters
AmazonOrganic and paid product listings, product detail data, ASINs for all product variants

Method

Merchant API uses Standard method only — no Live method available.

  1. POST to the task creation endpoint with your search parameters
  2. GET results after the system processes the task

For automated retrieval without polling, specify pingback_url or postback_url in your POST request:

  • pingback_url — DataForSEO sends a notification ping when the task completes
  • postback_url — DataForSEO sends the full result payload to your endpoint when complete. When using postback_url, also specify the function parameter: advanced or html.

If neither is specified, poll the 'Tasks Ready' endpoint to get a list of completed tasks, then retrieve each with the 'Task GET' endpoint.

Functions

Merchant API has two data retrieval functions:

Advanced — Full structured data: product names, prices, seller details, ratings, images, and all available product metadata.

HTML — Raw HTML page for the specified product name or identifier. Useful for custom parsing or when you need the complete page structure.

Google Shopping API

Task Post: POST https://api.dataforseo.com/v3/merchant/google/products/task_post

Returns Google Shopping results for a product name or search query, targeting a specific location and language. The check_url field in each result lets you verify the data in a browser.

cURL Example — Google Shopping Task Post

bash
curl --request POST \
  --url https://api.dataforseo.com/v3/merchant/google/products/task_post \
  --header 'Authorization: Basic BASE64(login:password)' \
  --header 'Content-Type: application/json' \
  --data '[
    {
      "keyword": "standing desk",
      "location_code": 2840,
      "language_code": "en",
      "priority": 2,
      "tag": "standing-desk-research"
    }
  ]'

cURL Example — Get Google Shopping Results

bash
curl --request GET \
  --url "https://api.dataforseo.com/v3/merchant/google/products/task_get/{task_id}/advanced" \
  --header 'Authorization: Basic BASE64(login:password)'

Amazon API

Task Post: POST https://api.dataforseo.com/v3/merchant/amazon/products/task_post

Returns Amazon search results for a keyword, including both organic and paid listings, with ASIN identifiers for each product and its variants.

cURL Example — Amazon Task Post

bash
curl --request POST \
  --url https://api.dataforseo.com/v3/merchant/amazon/products/task_post \
  --header 'Authorization: Basic BASE64(login:password)' \
  --header 'Content-Type: application/json' \
  --data '[
    {
      "keyword": "wireless mechanical keyboard",
      "location_code": 2840,
      "language_code": "en",
      "priority": 1,
      "postback_url": "https://your-server.com/webhook/amazon",
      "function": "advanced"
    }
  ]'

Priority Levels

The Standard method has two priority tiers affecting task processing speed and cost:

PriorityValueSpeed
Normal1Standard queue
High2Faster processing

Higher priority costs more per task. Use Normal for batch research; use High when results are time-sensitive.

Python Example — Price Monitoring Pipeline

python
import requests
from requests.auth import HTTPBasicAuth
import json
import time

LOGIN = "your_login"
PASSWORD = "your_password"
auth = HTTPBasicAuth(LOGIN, PASSWORD)
headers = {"Content-Type": "application/json"}

def post_google_shopping_task(keyword, location_code=2840, language_code="en", priority=1):
    payload = [{
        "keyword": keyword,
        "location_code": location_code,
        "language_code": language_code,
        "priority": priority
    }]

    r = requests.post(
        "https://api.dataforseo.com/v3/merchant/google/products/task_post",
        auth=auth,
        headers=headers,
        data=json.dumps(payload)
    )

    data = r.json()
    task_id = data["tasks"][0]["id"]
    print(f"Task created: {task_id}")
    return task_id


def get_tasks_ready():
    r = requests.get(
        "https://api.dataforseo.com/v3/merchant/google/products/tasks_ready",
        auth=auth,
        headers=headers
    )
    return r.json().get("tasks", [])


def get_task_results(task_id):
    r = requests.get(
        f"https://api.dataforseo.com/v3/merchant/google/products/task_get/{task_id}/advanced",
        auth=auth,
        headers=headers
    )
    return r.json()


def monitor_prices(products, location_code=2840, poll_interval=30):
    # Post all tasks
    task_ids = {}
    for product in products:
        task_id = post_google_shopping_task(product, location_code)
        task_ids[task_id] = product
        time.sleep(0.1)  # Small delay between POSTs

    # Poll until all complete
    results = {}
    pending = set(task_ids.keys())

    while pending:
        ready = get_tasks_ready()
        ready_ids = {t["id"] for t in ready}

        for task_id in list(pending):
            if task_id in ready_ids:
                data = get_task_results(task_id)
                results[task_ids[task_id]] = data
                pending.remove(task_id)
                print(f"Retrieved: {task_ids[task_id]}")

        if pending:
            print(f"Waiting for {len(pending)} tasks...")
            time.sleep(poll_interval)

    return results


# Monitor competitor prices for product categories
product_list = ["standing desk 60 inch", "ergonomic office chair", "monitor arm dual"]
price_data = monitor_prices(product_list)

for product, data in price_data.items():
    print(f"\n{product}:")
    try:
        items = data["tasks"][0]["result"][0]["items"]
        for item in items[:5]:
            print(f"  {item.get('title', 'N/A')} — ${item.get('price', {}).get('current', 'N/A')}")
    except (KeyError, IndexError, TypeError):
        print("  No results")

Rate Limits

  • Up to 2,000 POST and GET API calls per minute combined
  • Each POST request can contain up to 100 tasks

Special case: The Google Shopping Sellers Ad URL endpoint does not require a separate POST request. Results are retrieved directly via a GET request using the $shop_ad_aclk parameter in the URL.

Notes

  • Results match what users in the specified location actually see — personalization, search history, and user preferences are excluded from emulation.
  • The check_url in each result opens the verified search in Incognito mode to confirm accuracy.
  • Amazon data includes ASINs for all product modifications and variants listed for a given product.
  • postback_url is the preferred pattern for high-volume pipelines — avoids polling overhead and processes results as they complete.

Internal SOP reference — not affiliated with DataForSEO.