---
search:
  tags:
    - Ads
    - GET
seo:
  description: >-
    Available on: Meta TikTok Google Ads Reference for the GET /observe/ads
    endpoint in the AdCrunch API.
sidebar:
  label: 'Stored read: List ads'
  badge: GET
title: 'Stored read: List ads'
type: openapi-operation
---
**Available on:** [![Meta](/providers/meta.svg)](https://docs.adcrunch.dev/connect/providers) [![TikTok](/providers/tiktok.svg)](https://docs.adcrunch.dev/connect/providers) [![Google Ads](/providers/gads.svg)](https://docs.adcrunch.dev/connect/providers)

Lists the ads of every ad account your organization connects, across the providers, newest first.

## One concept, two words

An ad is an `ad` at Meta and TikTok. At Google Ads it is an **`ad_group_ad`** — the link resource that joins an ad to an ad group, whose id is the composite `{adGroupId}~{adId}`. AdCrunch stores that link as the leaf and does not model a separate shared ad, so a Google row answers the composite id. Every row keeps its own provider’s word in `type`.

## Narrowing

Two parents, and they are not the same question. `adGroupId` reads the ads of one ad group. `campaignId` reads **every** ad of a campaign, whatever ad group holds it — a grandparent, which the ad group filter cannot express. Send both to narrow twice.

## What is not here

Performance Max campaigns have **no ads**. Google’s automation assembles placements from an asset group, so nothing below a Performance Max campaign appears here.

`GET /observe/ads`
