Google data, ready when you are.
Web search, news, images, shopping and Play Store reviews from Google.
- See the price before every call
- Pay only for records that come back
- No subscription. Your balance never expires
What you can get.
- $0.0009per recordTry it →
Search
Google web results. Organic links with titles, snippets and rank; supports operators (site:, intitle:, OR). Billed per page of about ten results.
- $0.0018per recordTry it →
News
Google News articles for a query. Headline, publisher, date, link.
- $0.0009per recordTry it →
Images
Google Images for a query. URL, source page, dimensions, thumbnail.
- $0.0027per recordTry it →
Shopping
Google Shopping offers for a query. Title, merchant, price, rating.
- $0.00009per recordTry it →
Play reviews
Play Store reviews for up to five apps, by package id or store URL.
What the data looks like.
| rank | title | domain | snippet | publishedDate | link | details |
|---|---|---|---|---|---|---|
| 1 | How to price a B2B SaaS product (2026 guide) | northfold.example | A step-by-step way to set your first price, with worked examples. | 2026-08-12 | https://www.google.com/how-to-price-a-b2b-saas-product-2026-gui-1000 |
|
| 2 | SaaS pricing models compared | ledgerly.example | Per seat, usage-based and flat fees, side by side. | 2026-06-30 | https://www.google.com/saas-pricing-models-compared-1001 |
|
| 3 | Pricing page examples that convert | brightdesk.example | 24 real pricing pages and what they get right. | 2026-09-18 | https://www.google.com/pricing-page-examples-that-convert-1002 |
|
For developers
API reference.
One endpoint, POST /v1/google. Open an operation to see its fields.
Searchsearch
Google web results. Organic links with titles, snippets and rank; supports operators (site:, intitle:, OR). Billed per page of about ten results.
| Field | Type | Meaning |
|---|---|---|
| query * | string · ≤300 chars | |
| pages | integer · 1-5 | Billed per page of ~10 results. The one op counted in pages. |
| country | string · ISO alpha-2 | Country to search from. |
| language | string · BCP-47 | |
| site | string · ≤120 chars | Only results from this domain ("linkedin.com/in", "reddit.com"). The same as writing site: in the query. |
| relatedToSite | string · ≤120 chars | Sites Google considers similar to this domain, instead of the query's own matches. |
| since | string · YYYY-MM-DD | |
| until | string · YYYY-MM-DD | |
| fileTypes | list of string · each ≤8 chars | Only documents of these types, as extensions ("pdf", "xlsx", "ppt"). Empty = any page. |
Response fields, each row of data
| Field | Type |
|---|---|
| link | string |
| title | string |
| snippet | string |
| domain | string |
| source | string |
| publishedDate | string |
| rank | integer |
| relatedQuestions | any |
| relatedSearches | any |
| aiAnswer | string |
| aiAnswerSources | any |
| details | object |
Every field is present on every row: a value the source had nothing for is null, an empty list is []. details is always the last field: everything else the source sent for that row, under our own field names. Its keys depend on the source that answered, so read them defensively; it is {} when there is nothing more.
curl -X POST https://apiforagents.dev/v1/google \
-H "Authorization: Bearer $AFA_KEY" \
-H "Content-Type: application/json" \
-d '{"op":"search","query":"best CRM for startups","pages":1,"country":"US","language":"en"}'Example response rows
[
{
"rank": 1,
"title": "How to price a B2B SaaS product (2026 guide)",
"domain": "northfold.example",
"snippet": "A step-by-step way to set your first price, with worked examples.",
"publishedDate": "2026-08-12",
"link": "https://www.google.com/how-to-price-a-b2b-saas-product-2026-gui-1000",
"details": {}
},
{
"rank": 2,
"title": "SaaS pricing models compared",
"domain": "ledgerly.example",
"snippet": "Per seat, usage-based and flat fees, side by side.",
"publishedDate": "2026-06-30",
"link": "https://www.google.com/saas-pricing-models-compared-1001",
"details": {}
}
]An example to show the shape. The rows show the most used fields; a live row carries every field in the table above.
Newsnews
Google News articles for a query. Headline, publisher, date, link.
| Field | Type | Meaning |
|---|---|---|
| query * | string · ≤300 chars | |
| postedWithin | enum | 1h · 1d · 7d · 1y · any |
| country | string · ISO alpha-2 | The Google News market and its language. |
| language | string · BCP-47 | |
| limit | integer · 1-100 |
Response fields, each row of data
| Field | Type |
|---|---|
| articleUrl | string |
| title | string |
| source | string |
| publishedAt | string |
| publishedTimestamp | integer |
| imageUrl | string |
| details | object |
Every field is present on every row: a value the source had nothing for is null, an empty list is []. details is always the last field: everything else the source sent for that row, under our own field names. Its keys depend on the source that answered, so read them defensively; it is {} when there is nothing more.
curl -X POST https://apiforagents.dev/v1/google \
-H "Authorization: Bearer $AFA_KEY" \
-H "Content-Type: application/json" \
-d '{"op":"news","query":"electric vehicles","postedWithin":"7d","country":"US","language":"en","limit":20}'Example response rows
[
{
"title": "Kitebank opens its first branch in Europe",
"source": "Daily Ledger",
"publishedAt": "2026-10-15T08:00:00Z",
"articleUrl": "https://www.google.com/kitebank-opens-its-first-branch-in-europ-1000",
"imageUrl": "https://img.google.com/kitebank-opens-its-first-branch-in-europ.jpg",
"details": {}
},
{
"title": "Northfold raises $40M to automate finance teams",
"source": "Tech Wire",
"publishedAt": "2026-10-13T14:30:00Z",
"articleUrl": "https://www.google.com/northfold-raises-40m-to-automate-finance-1001",
"imageUrl": "https://img.google.com/northfold-raises-40m-to-automate-finance.jpg",
"details": {}
}
]An example to show the shape. The rows show the most used fields; a live row carries every field in the table above.
Imagesimages
Google Images for a query. URL, source page, dimensions, thumbnail.
| Field | Type | Meaning |
|---|---|---|
| query * | string · ≤300 chars | |
| limit | integer · 1-100 |
Response fields, each row of data
| Field | Type |
|---|---|
| imageUrl | string |
| title | string |
| sourceDomain | string |
| sourcePageUrl | string |
| thumbnailUrl | string |
| imageType | string |
| imageWidth | integer |
| imageHeight | integer |
| megapixels | number |
| orientation | string |
| details | object |
Every field is present on every row: a value the source had nothing for is null, an empty list is []. details is always the last field: everything else the source sent for that row, under our own field names. Its keys depend on the source that answered, so read them defensively; it is {} when there is nothing more.
curl -X POST https://apiforagents.dev/v1/google \
-H "Authorization: Bearer $AFA_KEY" \
-H "Content-Type: application/json" \
-d '{"op":"images","query":"Eiffel Tower at night","limit":20}'Example response rows
[
{
"title": "Minimal home office setup",
"sourceDomain": "northfold.example",
"imageType": "photo",
"imageWidth": 1600,
"imageHeight": 1067,
"megapixels": 1.7,
"orientation": "landscape",
"imageUrl": "https://img.google.com/minimal-home-office-setup.jpg",
"sourcePageUrl": "https://www.google.com/minimal-home-office-setup-1000",
"thumbnailUrl": "https://img.google.com/minimal-home-office-setup.jpg",
"details": {}
},
{
"title": "Home office with plants",
"sourceDomain": "interiors.example",
"imageType": "photo",
"imageWidth": 1080,
"imageHeight": 1350,
"megapixels": 1.5,
"orientation": "portrait",
"imageUrl": "https://img.google.com/home-office-with-plants.jpg",
"sourcePageUrl": "https://www.google.com/home-office-with-plants-1001",
"thumbnailUrl": "https://img.google.com/home-office-with-plants.jpg",
"details": {}
}
]An example to show the shape. The rows show the most used fields; a live row carries every field in the table above.
Shoppingshopping
Google Shopping offers for a query. Title, merchant, price, rating.
| Field | Type | Meaning |
|---|---|---|
| query * | string · ≤300 chars | |
| country | string · ISO alpha-2 | |
| language | string · BCP-47 | |
| postedWithin | enum | 1h · 1d · 7d · 30d · any |
| limit | integer · 1-100 |
Response fields, each row of data
| Field | Type |
|---|---|
| productId | string |
| productUrl | string |
| title | string |
| merchant | string |
| price | string |
| priceValue | number |
| rating | number |
| reviewCount | integer |
| position | integer |
| image | string |
| details | object |
Every field is present on every row: a value the source had nothing for is null, an empty list is []. details is always the last field: everything else the source sent for that row, under our own field names. Its keys depend on the source that answered, so read them defensively; it is {} when there is nothing more.
curl -X POST https://apiforagents.dev/v1/google \
-H "Authorization: Bearer $AFA_KEY" \
-H "Content-Type: application/json" \
-d '{"op":"shopping","query":"Sony WH-1000XM5","country":"US","language":"en","limit":20}'Example response rows
[
{
"title": "Sonora Buds Pro, Noise Cancelling",
"merchant": "Sonora Store",
"price": "$79.00",
"priceValue": 79,
"rating": 4.4,
"reviewCount": 2310,
"position": 1,
"productId": "1059897925",
"productUrl": "https://www.google.com/sonora-buds-pro-noise-cancelling-1000",
"details": {}
},
{
"title": "Sonora Buds Pro, Noise Cancelling",
"merchant": "GadgetHub",
"price": "$84.99",
"priceValue": 84.99,
"rating": 4.4,
"reviewCount": 2310,
"position": 2,
"productId": "2615731860",
"productUrl": "https://www.google.com/sonora-buds-pro-noise-cancelling-1001",
"details": {}
}
]An example to show the shape. The rows show the most used fields; a live row carries every field in the table above.
Play reviewsplayReviews
Play Store reviews for up to five apps, by package id or store URL.
| Field | Type | Meaning |
|---|---|---|
| subjects * | list of string · 1-5 items | Package ids or Play Store URLs. |
| country | string · ISO alpha-2 | |
| language | string · BCP-47 | |
| sort | enum | newest · rating_high · helpful |
| limit | integer · 1-100 |
Response fields, each row of data
| Field | Type |
|---|---|
| reviewId | string |
| reviewUrl | string |
| reviewer | string |
| reviewerPhoto | string |
| rating | number |
| reviewText | string |
| posted | string |
| appVersion | string |
| helpfulVotes | integer |
| developerReply | string |
| replyDate | string |
| subratings | any |
| details | object |
Every field is present on every row: a value the source had nothing for is null, an empty list is []. details is always the last field: everything else the source sent for that row, under our own field names. Its keys depend on the source that answered, so read them defensively; it is {} when there is nothing more.
curl -X POST https://apiforagents.dev/v1/google \
-H "Authorization: Bearer $AFA_KEY" \
-H "Content-Type: application/json" \
-d '{"op":"playReviews","subjects":["com.spotify.music"],"country":"US","language":"en","sort":"newest","limit":50}'Example response rows
[
{
"reviewer": "Ravi K.",
"rating": 5,
"reviewText": "Fast and simple. Exactly what I needed.",
"appVersion": "4.12.0",
"helpfulVotes": 38,
"posted": "2026-10-14",
"developerReply": "Thanks Ravi!",
"reviewId": "4228410525",
"reviewUrl": "https://www.google.com/ravi-k-1000",
"replyDate": "2026-10-02",
"details": {}
},
{
"reviewer": "Lena M.",
"rating": 2,
"reviewText": "Keeps logging me out after the update.",
"appVersion": "4.12.0",
"helpfulVotes": 104,
"posted": "2026-10-13",
"developerReply": "Sorry! A fix ships in 4.12.1.",
"reviewId": "2870120323",
"reviewUrl": "https://www.google.com/lena-m-1001",
"replyDate": "2026-10-07",
"details": {}
}
]An example to show the shape. The rows show the most used fields; a live row carries every field in the table above.