Apify hosts Actors. The official Google Trends Scraper takes search terms or Trends URLs and writes interest over time, subregion, related queries, and related topics into a dataset. The platform API starts a run. apify-client waits on that run. Trends API does not start a worker. POST https://api.trendsapi.ai/api returns an envelope. body is a JSON string and must be parsed a second time. Docs: the API reference. Caps: pricing.
An Actor run is a job, not a POST body
from apify_client import ApifyClient
client = ApifyClient("APIFY_TOKEN")
run = client.actor("apify/google-trends-scraper").call(
run_input={"searchTerms": ["webscraping"], "timeRange": "today 12-m"}
)
That token is an Apify token. Compute, proxy, and dataset storage bill on Apify. Check current Actor and platform prices on Apify before a volume estimate.
POST https://api.trendsapi.ai/api
Authorization: Bearer <api_key>
Content-Type: application/json
{"mode":"get_time_series","source":"google search","keyword":"webscraping"}
No dataset id. No maxConcurrency. No pageLoadTimeoutSecs.
apify/google-trends-scraper input fields
Documented fields include searchTerms, spreadsheetId, timeRange, customTimeRange, geo, category, and startUrls. Those names follow Explore. They do not follow percent_growth presets. Related queries come back because the Actor scraped the page. Trends API will not grow those columns.
Marketplace Actors do not share one schema
Store search also returns community scrapers, including trending-now Actors with daysBack and geo. Each listing is a different actor() id and a different output shape. A pipeline that only says it uses Apify for Trends still has to pin one listing. Trends API has one type string per live feed.
When a crawl is the right tool
Keep Apify when the team already orchestrates Actors, needs a spreadsheet ingest, or must capture a widget this API does not expose. Switch when the next join is source amazon on the same 0-100. An Actor will not emit that source without a second scrape product.