Skip to main content

Ad inspiration

What this is​

Ad inspiration is where you collect external ad references for creative research. Search the Meta Ad Library or TikTok, review the results, and save useful examples to your library. Start with a keyword or the source details you already have.

Common questions​

Use the Meta Ad Library tab or the TikTok tab. Each tab searches its own source.

Search by keyword or Facebook page URL, then set the country, media type, active status, and number of ads to return.

Can I save an ad for later?​

Yes. Use the save control on an ad card. Saved items are kept separately for each source.

What does the maximum ad count do?​

It limits how many ads the search returns. The default is 40.

Does running a search cost anything?​

Each search runs a paid job behind the scenes. Keeping the maximum ad count low keeps the cost of each search down.

How to use it​

  1. Choose Meta Ad Library or TikTok.
  2. Enter your search terms or source details and set the available filters.
  3. Run the search and review the ad cards.
  4. Open a source ad when you need more context, or save it to your library for later.

Screenshot​

Ad Inspiration

For developers — routes, guards, and internals
  • Route: /inspiration
  • Guard: authenticated session + view_creative_lab permission + flag.enable_ad_inspiration platform flag (src/app/inspiration/layout.tsx). No session → /login?callbackUrl=/inspiration, missing permission → /portal, flag off → /marketing. Scrape APIs are fail-closed on a missing APIFY_TOKEN.

Competitive-research surface — the V2 port of legacy Launchpad's /ad-inspiration + /meta-inspiration pages. Pulls live competitor ads from the Meta Ad Library and TikTok via Apify actors. Capture shows the initial state (no scrape executed).

Features

  • Two tabs: Meta Ad Library / TikTok. Tab strip at the top switches between the two source panes; each pane posts to its own API route (/api/inspiration/meta, /api/inspiration/tiktok).
  • Meta pane inputs. Free-text keyword OR a newline-separated list of Facebook page URLs; 2-letter country code (uppercased, default US); media type ALL | IMAGE | VIDEO | MEME; active status active | inactive | all; max-ads count (default 40). These map 1:1 onto the scrape request body (country, media_type, active_status, max_ads).
  • TikTok pane. Equivalent controls targeting TikTok's Creative Center / Ads Library sources via /api/inspiration/tiktok. A separate /api/inspiration/tiktok/creative-center-cookie route exists for supplying the Creative Center session cookie the scraper needs. UNVERIFIED: exact TikTok pane field set not re-checked against the component beyond the tab and endpoints.
  • Result grid with proxied images. Ad cards render creative thumbnails through /api/inspiration/proxy-image?url=... — every external Meta/TikTok CDN asset is routed through this same-origin proxy so the browser never hits fbcdn.net/tiktokcdn.com directly (avoids CORS and hotlink blocking); already-relative URLs are passed through untouched. Cards link out to the source platform.
  • Save-to-library toggle. Per-card save keyed by apify_item_id, with separate collections per source: POST /api/inspiration/meta/saves / POST /api/inspiration/tiktok/saves, unsave via DELETE ...?apify_item_id=..., item management via the [id] routes. Saved/saving state is tracked client-side per session.
  • Server-side token. All Apify calls run in the route handlers; the APIFY_TOKEN never ships to the browser, and the routes error explicitly when it is unset rather than returning fake data.
  • App chrome. Shared AdminSidebarShell, grouped with the Creative Studio surfaces under the view_creative_lab permission; the nav entry follows the flag via getDisabledSidebarFlags.
  • Session-local save state. Like the Reddit page, saved/saving flags live in component state keyed by apify_item_id (useSaves hook, one instance per source endpoint); the library rows persist server-side but the toggles reset on reload.
  • Cost note for the client. Each scrape runs a paid Apify actor job under the platform token; the max-ads input (default 40) bounds per-search cost.

Key files

KindPath
Layout guardsrc/app/inspiration/layout.tsx
Pagesrc/app/inspiration/page.tsx
Viewsrc/components/inspiration/InspirationView.tsx
API/api/inspiration/meta, /api/inspiration/meta/saves, /api/inspiration/tiktok, /api/inspiration/tiktok/saves, /api/inspiration/tiktok/creative-center-cookie, /api/inspiration/proxy-image