pytrends is a Python scrape client. GitHub archived the repository on 17 April 2025. PyPI still serves 4.9.2 and the README still asks for maintainers. TrendReq plus build_payload plus interest_over_time() hits Google's website. Trends API does not import that stack. POST https://api.trendsapi.ai/api with a Bearer key. body is a JSON string and must be parsed a second time. Docs: the API reference. Caps: pricing. Google notes: the Google Trends guide.

Archived 17 April 2025

Archive means no merges. Open TooManyRequestsError issues stay as archaeology. A lockfile that pins 4.9.2 is a clock. Trends API versioning is this product's HTTP contract, not a GitHub tree.

TrendReq is a session, not a contract

from pytrends.request import TrendReq
pt = TrendReq(hl="en-US", tz=360)
pt.build_payload(["coffee"], timeframe="today 5-y")
pt.interest_over_time()

hl, tz, proxies, and retries exist because the transport is HTML. They do not exist on this POST. gprop='youtube' becomes a new call with source youtube.

DataFrame columns that have no field here

isPartial, rising/top related queries, and DMA maps will not appear after json.loads(outer["body"]). If those columns are the product, keep a scrape client or a SERP vendor that still returns them. If the product is a 0-100 series plus growth windows, the DataFrame is a local convenience on top of get_time_series or get_growth.

A 429 from Google is not a 429 from /api

pytrends wraps Google's 429 as TooManyRequestsError. Cookie knobs chase that status. A 429 from api.trendsapi.ai is a quota or burst on a key. Read pricing. Do not rotate NID cookies in front of a Bearer header.