# Google (/docs/google)
Google [#google]
Four Google surfaces behind one key: web search results, the Ads Transparency Center (who is
advertising, with what creative, where), Google Business Profiles with their reviews, owner
posts and customer questions, and Google Travel hotel listings with vendor pricing. Each is
useful on its own; together they cover most of what a competitor or local-market research
pipeline needs from Google.
Base URL: `/v1/google/...`
The Business Profile endpoints each require one of a small identifier set, and the sets differ.
`business/info`
,
`business/extended-reviews`
and
`business/questions`
accept
`keyword`
,
`cid`
or
`place_id`
;
`business/updates`
accepts
`keyword`
or
`cid`
only. Sending none is a
`400`
before billing.
Getting started [#getting-started]
Every endpoint is a `GET` with query parameters and an `x-api-key` header.
```bash
# Web search — 1 credit
curl "https://www.socialcrawl.dev/v1/google/search?query=social%20media%20api®ion=US" \
-H "x-api-key: $SOCIALCRAWL_API_KEY"
# Every ad a company is running — 5 credits
curl "https://www.socialcrawl.dev/v1/google/company/ads?domain=lululemon.com" \
-H "x-api-key: $SOCIALCRAWL_API_KEY"
```
Web search [#web-search]
`GET /v1/google/search?query=…` returns ranked organic results — title, page URL, snippet, and
position — for 1 credit. `region` takes a two-letter country code and returns that country's
results, and `page` walks the ranking. For Korean-language web pages
[`/v1/naver/webkr/search`](/docs/naver.md) indexes far more deeply, and for headlines
[`/v1/google_news/search`](/docs/google_news.md) is the right surface.
Ads Transparency Center [#ads-transparency-center]
Three endpoints, and the order matters because the Transparency Center indexes advertisers by an
opaque id.
Start from a domain if you have one: `company/ads?domain=lululemon.com` returns that
advertiser's ad history directly. When all you have is a brand name, resolve it first with
`adlibrary/advertisers/search?query=lululemon`, which returns matching advertisers with their
`advertiser_id` and region (it defaults to searching the US — pass `region` for another market).
```bash
# 1. Brand name to advertiser id
curl "https://www.socialcrawl.dev/v1/google/adlibrary/advertisers/search?query=lululemon®ion=CA" \
-H "x-api-key: $SOCIALCRAWL_API_KEY"
# 2. Their ads, filtered to YouTube video creatives this year
curl "https://www.socialcrawl.dev/v1/google/company/ads?advertiser_id=$ADVERTISER_ID&platform=youtube&format=video&start_date=2026-01-01" \
-H "x-api-key: $SOCIALCRAWL_API_KEY"
```
`company/ads` filters on `platform` (`google_maps`, `google_play`, `google_search`,
`google_shopping`, `youtube`), `format` (`text`, `image`, `video`), a `start_date`/`end_date`
window, and `topic` (`all` or `political` — political searches also need a `region`). It
cursor-paginates.
The list rows carry a creative id, ad URL, advertiser name, thumbnail and first-shown date, but
not the ad's own copy. For that, pass a row's creative URL to `GET /v1/google/ad`. That URL must
contain both segments — `…/advertiser/{AR…}/creative/{CR…}` — because an advertiser-only URL
does not identify an ad. No impression estimate is returned by either endpoint; Google does not
publish one here.
Business Profiles [#business-profiles]
`/v1/google/business/info` resolves one local business and returns its name, category, star
rating, address, phone, coordinates, opening hours, and whether the listing is claimed, for 1
credit. Identify it by `keyword` (business name plus address, e.g. `Irving Farm New York 645 5th
Ave`), or exactly by `cid` or `place_id` when you already hold one. `location_name` takes a
`City,Region,Country` string for geographic context and defaults to New York.
Three endpoints go deeper on the same place:
* `/v1/google/business/extended-reviews` (5cr) returns reviews from the Google listing *and*
from third-party sites such as TripAdvisor and Yelp, each with its source, text, rating and
owner reply. `depth` runs in steps of 20 up to 1000.
* `/v1/google/business/questions` (5cr) returns the public customer questions and their answers
as one flat list, where each answer links to its question through `parent_id`.
* `/v1/google/business/updates` (1cr) returns the posts the owner published on the profile. Most
businesses publish none, so an empty list here is a normal answer rather than a failure.
Hotels [#hotels]
`hotels/search?keyword=hotels in Barcelona` returns candidate hotels from Google Travel with
star rating, review score, coordinates, images, nightly price and an opaque `hotel_identifier`,
for 1 credit. `check_in` and `check_out` set the stay being priced; omitted, they default to
tomorrow for one night. Pass an identifier to `/v1/google/hotels/info` (5cr) for the full record
— description, address, phone, amenities, review sentiment topics, and prices from several
booking vendors.
```bash
curl "https://www.socialcrawl.dev/v1/google/hotels/search?keyword=hotels%20in%20Barcelona&check_in=2026-09-12&check_out=2026-09-15" \
-H "x-api-key: $SOCIALCRAWL_API_KEY"
```
Endpoints [#endpoints]
Read this before you build [#read-this-before-you-build]
**Every business endpoint needs one of a small identifier set, and the sets differ.**
`business/info`, `business/extended-reviews` and `business/questions` accept `keyword`, `cid` or
`place_id`. `business/updates` accepts `keyword` or `cid` only — there is no `place_id` on that
one. Sending none of them is a `400` before billing.
**`cid` is the reliable identifier.** A `keyword` match is a search, so an ambiguous business
name resolves to whichever listing Google ranks first. Resolve once with `business/info`, store
the `cid`, and use it everywhere after that.
**The ad-list rows have no engagement and no duration.** Ad Library records carry no views,
likes, comments or shares, and video ads carry no duration at the list level, so those canonical
fields come back null rather than zero. `get_ad_details` is the opt-in expansion for per-ad
detail.
**Image URLs on ads are frequently null.** Text-format ads carry an archived creative thumbnail;
image and video formats often do not, because Google does not archive video frames in the list
response.
Notes [#notes]
* All endpoints use `GET` with query parameters
* Authentication via the `x-api-key` header
* Responses follow the unified SocialCrawl schema
* `language_name` on the business and hotel endpoints selects the result language and defaults
to English
* Several business and hotel endpoints run as upstream tasks, so allow a longer client timeout
on `business/updates`, `business/extended-reviews` and `hotels/info` than on the inline ones