DataGuru exposes a collection of platform-specific REST APIs that return structured, typed JSON data. Each endpoint accepts a POST request with a JSON body and responds with a consistent envelope format.
Base URL
https://api.dataguru.ccv1All API requests should use HTTPS. HTTP requests are automatically rejected.
Start integrating DataGuru in minutes. Our REST APIs allow you to extract structured data from external platforms effortlessly using standard HTTP clients.
Before making requests, you must authenticate. Navigate to the Developer Portal to generate your first API key. Keep this key secure as it grants access to your quota.
Include your API key in the Authorization header using the Api-Key scheme. Most endpoints accept GET requests with query parameters; check each endpoint's own reference page for its exact method and parameters. Here is a basic example calling the Amazon Product Search API:
curl -G "https://api.dataguru.cc/api/v1/amazon/products/search" \ -H "Authorization: Api-Key YOUR_API_KEY" \ --data-urlencode "q=mechanical keyboard"
Every request returns a consistent envelope containing success, meta, and data objects.
{
"success": true,
"meta": {
"request_id": "req_amz_994827103a",
"execution_time_ms": 128,
"total_results": 1420,
"page": 1
},
"data": {
"items": [
{
"asin": "B09XS7JWHH",
"title": "Keychron K2 Wireless Mechanical Keyboard",
"price": 89.99,
"rating": 4.6,
"reviews_count": 14820,
"in_stock": true
}
]
}
}The DataGuru API uses API key authentication via the Api-Key scheme. You must include a valid API key in the headers of all requests to authenticate successfully.
Your API key should be passed in the Authorization HTTP header using the Api-Key schema.
Authorization: Api-Key dg_live_9f82b7c4a1e9382d...
DataGuru provides two types of API keys. Use the appropriate key depending on your environment.
Used for production traffic. Live keys are charged real credits.
dg_live_*Used for testing integration. Returns mock data and does not consume credits.
dg_test_*If authentication fails, the API will return one of the following error codes along with a JSON error envelope.
| HTTP Status | Error Code | Description |
|---|---|---|
| 401 | UNAUTHORIZED | No API key was provided or the key format is invalid. |
| 403 | FORBIDDEN | The API key exists but is revoked or lacks permissions for this endpoint. |
| 429 | RATE_LIMITED | The key has exceeded its rate limit. Retry after the indicated period. |
/api/v1/amazon/products/searchSearch for products on Amazon with prices, ratings, and reviews.
| Name | Type | Requirement | Description |
|---|---|---|---|
| q | string | Required | Search query term |
curl -X GET "https://api.dataguru.cc/api/v1/amazon/products/search?q=example" \ -H "Authorization: Api-Key YOUR_API_KEY"
Every endpoint returns the extracted data wrapped in a consistent envelope, with request metadata attached.
{
// ...extracted data fields...
"_metadata": {
"request_id": "req_amazon-products-search_a1b2c3",
"execution_time_ms": 234,
"endpoint": "Amazon Product Search",
"mode": "live"
}
}$0.005 / per request (USD)
60 requests/minute · 10000 requests/day · 100,000 monthly quota
/api/v1/google/serpReal-time Google search engine results page (SERP).
| Name | Type | Requirement | Description |
|---|---|---|---|
| q | string | Required | query parameter |
curl -X GET "https://api.dataguru.cc/api/v1/google/serp?q=example" \ -H "Authorization: Api-Key YOUR_API_KEY"
Every endpoint returns the extracted data wrapped in a consistent envelope, with request metadata attached.
{
// ...extracted data fields...
"_metadata": {
"request_id": "req_google-serp-broker_a1b2c3",
"execution_time_ms": 234,
"endpoint": "Google SERP Search",
"mode": "live"
}
}$0.003 / per request (USD)
60 requests/minute · 10000 requests/day · 100,000 monthly quota
/api/v1/daraz/searchScrapes search results directly from Daraz Pakistan.
| Name | Type | Requirement | Description |
|---|---|---|---|
| q | string | Required | query parameter |
curl -X GET "https://api.dataguru.cc/api/v1/daraz/search?q=example" \ -H "Authorization: Api-Key YOUR_API_KEY"
Every endpoint returns the extracted data wrapped in a consistent envelope, with request metadata attached.
{
// ...extracted data fields...
"_metadata": {
"request_id": "req_daraz-product-search_a1b2c3",
"execution_time_ms": 234,
"endpoint": "Daraz Product Search",
"mode": "live"
}
}$0.004 / per request (USD)
60 requests/minute · 10000 requests/day · 100,000 monthly quota
/api/v1/quotes/randomRetrieve inspiring random quotes formatted into clean JSON.
curl -X GET "https://api.dataguru.cc/api/v1/quotes/random" \ -H "Authorization: Api-Key YOUR_API_KEY"
Every endpoint returns the extracted data wrapped in a consistent envelope, with request metadata attached.
{
// ...extracted data fields...
"_metadata": {
"request_id": "req_inspiring-quotes_a1b2c3",
"execution_time_ms": 234,
"endpoint": "Inspiring Quotes",
"mode": "live"
}
}$0.001 / per request (USD)
60 requests/minute · 10000 requests/day · 100,000 monthly quota
| HTTP Status | Error Code | Description |
|---|---|---|
| 400 | INVALID_PARAMETER | A required parameter is missing or malformed. |
| 401 | UNAUTHORIZED | Missing or invalid API key. |
| 403 | ENDPOINT_DISABLED | This endpoint is currently unavailable. |
| 429 | RATE_LIMIT_EXCEEDED | Too many requests — see the Retry-After header. |
| 502 | PROVIDER_ERROR | The upstream provider failed. Retry with exponential backoff. |
/api/v1/documents/pdf-parser/jobsUpload a PDF and get back structured JSON/CSV. Async: submit a job, then poll for the result.
| Name | Type | Requirement | Description |
|---|---|---|---|
| file | file | Required | The PDF file to extract. |
| key_fields | string | Optional | Comma-separated list of fields to extract. |
curl -X POST "https://api.dataguru.cc/api/v1/documents/pdf-parser/jobs" \ -H "Authorization: Api-Key YOUR_API_KEY" \ -F "file=@/path/to/file.pdf" \ -F "key_fields=example"
Every endpoint returns the extracted data wrapped in a consistent envelope, with request metadata attached.
{
// ...extracted data fields...
"_metadata": {
"request_id": "req_pdf-parser_a1b2c3",
"execution_time_ms": 234,
"endpoint": "PDF to JSON",
"mode": "live"
}
}$0.020 / per request (USD)
/api/v1/documents/resume-parser/jobsUpload a resume and get back structured candidate data (contact info, skills, experience, education). Async: submit a job, then poll for the result.
| Name | Type | Requirement | Description |
|---|---|---|---|
| file | file | Required | The resume file (PDF) to parse. |
| job_description | string | Optional | Job description to score the resume against. |
| job_title | string | Optional | Job title to score the resume against. |
curl -X POST "https://api.dataguru.cc/api/v1/documents/resume-parser/jobs" \ -H "Authorization: Api-Key YOUR_API_KEY" \ -F "file=@/path/to/file.pdf" \ -F "job_description=example" \ -F "job_title=example"
Every endpoint returns the extracted data wrapped in a consistent envelope, with request metadata attached.
{
// ...extracted data fields...
"_metadata": {
"request_id": "req_resume-parser_a1b2c3",
"execution_time_ms": 234,
"endpoint": "Bulk Resume Parser",
"mode": "live"
}
}/ per request (USD)
/api/v1/amazon/search/Amazon product data extraction API
curl -X GET "https://api.dataguru.cc/api/v1/amazon/search/" \ -H "Authorization: Api-Key YOUR_API_KEY"
Every endpoint returns the extracted data wrapped in a consistent envelope, with request metadata attached.
{
// ...extracted data fields...
"_metadata": {
"request_id": "req_amazon-e-commerce_a1b2c3",
"execution_time_ms": 234,
"endpoint": "Amazon E-Commerce",
"mode": "live"
}
}$0.005 / per request (USD)
60 requests/minute · 10000 requests/day · 100,000 monthly quota
| HTTP Status | Error Code | Description |
|---|---|---|
| 400 | INVALID_PARAMETER | A required parameter is missing or malformed. |
| 401 | UNAUTHORIZED | Missing or invalid API key. |
| 403 | ENDPOINT_DISABLED | This endpoint is currently unavailable. |
| 429 | RATE_LIMIT_EXCEEDED | Too many requests — see the Retry-After header. |
| 502 | PROVIDER_ERROR | The upstream provider failed. Retry with exponential backoff. |
/api/v1/linkedin/profile/LinkedIn Profile and Graph API
curl -X GET "https://api.dataguru.cc/api/v1/linkedin/profile/" \ -H "Authorization: Api-Key YOUR_API_KEY"
Every endpoint returns the extracted data wrapped in a consistent envelope, with request metadata attached.
{
// ...extracted data fields...
"_metadata": {
"request_id": "req_linkedin-profile_a1b2c3",
"execution_time_ms": 234,
"endpoint": "LinkedIn",
"mode": "live"
}
}$0.005 / per request (USD)
60 requests/minute · 10000 requests/day · 100,000 monthly quota
| HTTP Status | Error Code | Description |
|---|---|---|
| 400 | INVALID_PARAMETER | A required parameter is missing or malformed. |
| 401 | UNAUTHORIZED | Missing or invalid API key. |
| 403 | ENDPOINT_DISABLED | This endpoint is currently unavailable. |
| 429 | RATE_LIMIT_EXCEEDED | Too many requests — see the Retry-After header. |
| 502 | PROVIDER_ERROR | The upstream provider failed. Retry with exponential backoff. |
DataGuru uses rate limiting to prevent abuse and ensure stability for all customers. If your requests exceed your plan's concurrency or throughput limits, the API will respond with a 429 Too Many Requests error.
Every API response includes headers detailing your current rate limit status. You should use these headers to pace your requests before you hit the limit.
| Header | Description |
|---|---|
| X-RateLimit-Limit | The maximum number of requests you're permitted to make per window. |
| X-RateLimit-Remaining | The number of requests remaining in the current rate limit window. |
| X-RateLimit-Reset | The time at which the current rate limit window resets in UTC epoch seconds. |
If you receive a 429 status code, your code should pause execution. The error payload includes a retry_after field indicating how many seconds to wait.
{
"success": false,
"error": {
"code": "RATE_LIMITED",
"message": "Too many requests. Please retry after 14 seconds.",
"retry_after": 14
}
}DataGuru uses conventional HTTP response codes to indicate the success or failure of an API request. In general, codes in the 2xx range indicate success, codes in the 4xx range indicate an error that failed given the information provided, and codes in the 5xx range indicate an error with our servers.
When an error occurs, the API returns a JSON envelope containing a machine-readable code and a human-readable message.
{
"success": false,
"error": {
"code": "RATE_LIMITED",
"message": "Too many requests. Please retry after 60 seconds.",
"retry_after": 60
}
}| HTTP Status | Error Code | Description |
|---|---|---|
| 200 | OK | Everything worked as expected. |
| 400 | BAD_REQUEST | The request was unacceptable, often due to missing a required parameter. |
| 401 | UNAUTHORIZED | No valid API key provided. |
| 402 | REQUEST_FAILED | The parameters were valid but the request failed (e.g., target platform captcha blocked us). |
| 403 | FORBIDDEN | The API key doesn't have permissions to perform the request. |
| 404 | NOT_FOUND | The requested resource doesn't exist. |
| 409 | CONFLICT | The request conflicts with another request. |
| 429 | RATE_LIMITED | Too many requests hit the API too quickly. |
| 500 | INTERNAL_ERROR | Something went wrong on DataGuru's end. |
| 503 | UPSTREAM_ERROR | The target platform is down or unreachable. |
Common questions and answers about integrating and using the DataGuru API.
DataGuru operates on a credit-based billing system. Live requests cost credits based on the API endpoint complexity (e.g., 5 credits for Amazon, 15 for LinkedIn). If you pass the `fallback: true` flag and we return cached data, the request is billed at a 90% discount.
If you exceed your plan's concurrency or throughput limits, the API will return a 429 Too Many Requests status code. The response will include a `retry_after` field indicating how long you must wait before sending another request.
Live API requests are executed in real-time. If you request cached data, we guarantee the data is no older than 24 hours. Our global proxies and anti-bot evasion systems ensure that the real-time data fetched is highly accurate and un-blocked.
No. DataGuru completely abstracts away proxy rotation, CAPTCHA solving, and headless browser management. You simply make a REST API request, and we return structured JSON.
We are currently developing official SDKs for Python, Node.js, and Go. In the meantime, the API is a standard REST interface that can be easily integrated using any HTTP client (e.g., Axios, fetch, requests).
| HTTP Status | Error Code | Description |
|---|---|---|
| 400 | INVALID_PARAMETER | A required parameter is missing or malformed. |
| 401 | UNAUTHORIZED | Missing or invalid API key. |
| 403 | ENDPOINT_DISABLED | This endpoint is currently unavailable. |
| 429 | RATE_LIMIT_EXCEEDED | Too many requests — see the Retry-After header. |
| 502 | PROVIDER_ERROR | The upstream provider failed. Retry with exponential backoff. |
| HTTP Status | Error Code | Description |
|---|---|---|
| 400 | INVALID_PARAMETER | A required parameter is missing or malformed. |
| 401 | UNAUTHORIZED | Missing or invalid API key. |
| 403 | ENDPOINT_DISABLED | This endpoint is currently unavailable. |
| 429 | RATE_LIMIT_EXCEEDED | Too many requests — see the Retry-After header. |
| 502 | PROVIDER_ERROR | The upstream provider failed. Retry with exponential backoff. |
| HTTP Status | Error Code | Description |
|---|---|---|
| 400 | INVALID_PARAMETER | A required parameter is missing or malformed. |
| 401 | UNAUTHORIZED | Missing or invalid API key. |
| 403 | ENDPOINT_DISABLED | This endpoint is currently unavailable. |
| 429 | RATE_LIMIT_EXCEEDED | Too many requests — see the Retry-After header. |
| 502 | PROVIDER_ERROR | The upstream provider failed. Retry with exponential backoff. |
20 requests/minute · 2000 requests/day · 20,000 monthly quota
| HTTP Status | Error Code | Description |
|---|---|---|
| 400 | INVALID_PARAMETER | A required parameter is missing or malformed. |
| 401 | UNAUTHORIZED | Missing or invalid API key. |
| 403 | ENDPOINT_DISABLED | This endpoint is currently unavailable. |
| 429 | RATE_LIMIT_EXCEEDED | Too many requests — see the Retry-After header. |
| 502 | PROVIDER_ERROR | The upstream provider failed. Retry with exponential backoff. |
20 requests/minute · 2000 requests/day · 20,000 monthly quota
| HTTP Status | Error Code | Description |
|---|---|---|
| 400 | INVALID_PARAMETER | A required parameter is missing or malformed. |
| 401 | UNAUTHORIZED | Missing or invalid API key. |
| 403 | ENDPOINT_DISABLED | This endpoint is currently unavailable. |
| 429 | RATE_LIMIT_EXCEEDED | Too many requests — see the Retry-After header. |
| 502 | PROVIDER_ERROR | The upstream provider failed. Retry with exponential backoff. |
When integrating with DataGuru in production, we strongly recommend implementing an exponential backoff algorithm with jitter. This ensures your application handles spikes gracefully and automatically recovers from rate limiting without human intervention.