Appearance
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-Group | Endpoints | What It Returns |
|---|---|---|
| Google Shopping — Products | 4 | Product listing data: names, prices, sellers, ratings |
| Google Shopping — Sellers | 4 | Seller listings for a specific product |
| Google Shopping — Product Info | 3 | Detailed product specification pages |
| Google Shopping — Reviews | 3 | Product reviews from Google Shopping |
Amazon (15 endpoints across 3 sub-groups)
| Sub-Group | Endpoints | What It Returns |
|---|---|---|
| Amazon — Products | 4 | Organic and paid Amazon product listings |
| Amazon — ASIN | 4 | Specific product detail data with all ASIN variants |
| Amazon — Sellers | 4 | Seller profiles and listings |
Quick Endpoint Reference
| Endpoint | Method | Description |
|---|---|---|
/v3/merchant/google/products/task_post | POST | Queue Google Shopping search |
/v3/merchant/google/products/tasks_ready | GET | Get completed product tasks |
/v3/merchant/google/products/task_get/{id}/advanced | GET | Retrieve product SERP data |
/v3/merchant/google/sellers/task_post | POST | Queue seller search for a product |
/v3/merchant/google/product_info/task_post | POST | Queue product specification page task |
/v3/merchant/google/product_spec/task_post | POST | Queue product spec detail task |
/v3/merchant/google/product_reviews/task_post | POST | Queue product reviews task |
/v3/merchant/amazon/products/task_post | POST | Queue Amazon product search |
/v3/merchant/amazon/products/tasks_ready | GET | Get completed Amazon tasks |
/v3/merchant/amazon/products/task_get/{id}/advanced | GET | Retrieve Amazon product results |
/v3/merchant/amazon/asin/task_post | POST | Queue ASIN-level detail task |
/v3/merchant/amazon/asin/task_get/{id}/advanced | GET | Retrieve ASIN data |
/v3/merchant/amazon/sellers/task_post | POST | Queue seller data task |
What It Covers
| Platform | Data available |
|---|---|
| Google Shopping | Product listing data, product specification pages, prices, seller listings, full advertised product URLs with all parameters |
| Amazon | Organic and paid product listings, product detail data, ASINs for all product variants |
Method
Merchant API uses Standard method only — no Live method available.
- POST to the task creation endpoint with your search parameters
- 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 completespostback_url— DataForSEO sends the full result payload to your endpoint when complete. When usingpostback_url, also specify thefunctionparameter:advancedorhtml.
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:
| Priority | Value | Speed |
|---|---|---|
| Normal | 1 | Standard queue |
| High | 2 | Faster 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_urlin 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_urlis the preferred pattern for high-volume pipelines — avoids polling overhead and processes results as they complete.