citlyze docs

Shopping Observations

Individual product observations from AI shopping surfaces.

GET /api/v1/shopping-observations returns the raw observations behind the shopping aggregates: one row per product seen in an AI shopping result. Rows from the weekly Google surface runs carry a run_id joinable to runs; rows from the ChatGPT capture add-on stand alone with run_id null.

Filters

ParameterMeaning
prompt_idRestrict to one tracked prompt.
surfaceai_mode, ai_overview, chatgpt, or copilot.
capture_sourceserp (Google surfaces) or scraper (ChatGPT capture).
matched_product_idRestrict to one catalog product.
run_idRestrict to one run's observations.
since / untilBounds for captured_at (ISO timestamp).

Standard parameters (limit, offset, format=csv) work as described in Pagination, filtering, and errors.

Key fields

  • observation_id: stable identifier
  • surface and capture_source: where and how the product was observed
  • prompt_id: the tracked prompt whose answer carried the product
  • position: 1-based rank within the shopping result
  • title, brand_text, merchant: the product as displayed
  • price_cents and currency: the observed price, when shown
  • rating and review_count: displayed review data, when shown
  • matched_product_id and match_confidence: the catalog product this observation resolved to (exact, strong, or fuzzy), or null when no catalog product matches
  • captured_at: when the observation was recorded

Rows are ordered by captured_at descending with observation_id as the tiebreak, so offset pagination is stable.

Example

curl -H "Authorization: Bearer $AEO_API_KEY" \
  "https://app.citlyze.com/api/v1/shopping-observations?surface=ai_mode&since=2026-08-01"

Use this resource to audit exactly which products AI surfaces showed for your prompts, at what positions and prices, and which merchants carried them.

On this page