You have the data.
Here’s where it can go.
Set up a weekly research sheet, ask Claude for a brief, build a dashboard, or load the records into your warehouse.
Keep the research in a shared sheet.
Schedule a scraper and append its records to Google Sheets. Your team can review new ads or other changes in one place.
Sheets works well for a small team. A warehouse is usually a better home for a larger history or nested records.
Start with a small watchlist
Choose one scraper, a small record limit and a fixed list of brands, searches or companies. Review the first dataset before scheduling it.
Send successful runs to Sheets
Use Make's Apify modules or n8n to watch for a successful run, fetch its dataset items and append the fields you need to Google Sheets. You can also start with a manual CSV import.
Keep the run history
Add collected_at and run_id. Remove duplicates using the source ID within each snapshot. Flatten the fields you need and save the raw JSON elsewhere.
Leave room for your notes
Add columns for message themes, campaign ideas and what to do next. Use filters or a pivot table when you review the sheet each week.
Get a brief with sources you can check.
Connect Claude to the Apify MCP server. Ask it to run a scraper for a specific question, then summarize the results with links to the records.
Your Apify account and the Actor's current pricing determine the usage charges. The Claude connectors you can use depend on your client and account.
Connect Claude to Apify
In Claude Desktop, add the Apify connector or a custom connector using https://mcp.apify.com. Sign in to your Apify account when prompted.
Name the scraper and set a limit
Give Claude the JMLP Actor name and ask it to check the input schema. Specify the targets and markets, along with a small result limit.
Ask for sources with the summary
Request original links or record IDs. Ask Claude to separate observations from hypotheses and point out missing fields or gaps in coverage.
Check the records before using the brief
Review the results and source creatives. Ad dates and reach bands don't tell you sales, conversions or return on ad spend.
Use jmlp/meta-ad-library-scraper to collect up to 50 active ads for ZARA in GB. First check the Actor input schema. Group the creative messages by hook and offer, cite the original ad IDs, and propose three testable campaign hypotheses. Do not infer spend or conversion performance.See changes in a dashboard.
Connect a scraper's Google Sheets output to Looker Studio. Follow ad activity, search rankings or hiring patterns across repeated runs.
Keep missing fields visible. Reach bands and repeated platform observations shouldn't be added together as one audience total.
Prepare the reporting table
Start by mapping the output to Google Sheets. Decide what one row means, such as one observed creative or one search result.
Connect Looker Studio
Add the Google Sheets table as a data source. Set the date and number types, then add filters for advertiser, country or query.
Choose what to follow
Try a timeline of new creatives, search rankings over time, or job postings by role and location. Show the collection period and what the source covers.
Move the history to BigQuery when needed
For larger datasets, connect Looker Studio to modeled BigQuery tables. If you use Looker, use your team's governed BigQuery connection and LookML model.
Keep a history your analysts can query.
Load scraper output into BigQuery and keep the raw snapshots. Use SQL and dbt to build tables your team can trust.
You'll need schedules, API credentials and loading jobs in your own stack. I can help design and build that pipeline.
Save the raw run
Fetch each successful run's dataset as JSON using the Apify API or Python client. Store the raw record with run_id, collected_at and source in a BigQuery landing table.
Decide what one record represents
The same ad seen in two countries is still one creative. Keep platform IDs and store regional observations separately where needed.
Build SQL and dbt models
Use staging models to normalize dates and field names. Add dbt uniqueness and not-null tests where the source supports them. Keep unavailable fields null.
Share tables your team can use
Publish tables for creative inventories, search visibility or account research. Verify identities before joining records to your own CRM or campaign data.
-- Assumes a normalized BigQuery observation table.
-- Counts observed records, not audience or ad performance.
SELECT
source,
source_id,
advertiser,
collected_at
FROM `your_project.marketing.ad_observations`
QUALIFY ROW_NUMBER() OVER (
PARTITION BY source, source_id
ORDER BY collected_at DESC
) = 1;A company list for a specific niche.
Google Search + Website Contacts
An agency researching independent outdoor retailers could start with a set of Google searches in its target market. Check the returned domains, then send the verified shortlist to Website Contacts.
In Sheets, join the outputs on normalized domain. Keep the search query, published contact details and your notes on account fit. In BigQuery, store search observations separately from contact records so a company found by several queries isn’t counted several times.
You’ll have a company research list with sources your team can review.
Explore Website ContactsOne brand’s ads,
compared across channels.
Meta + Google + TikTok + LinkedIn
Pick one competitor and use the same research window. Collect a limited set of records from all four supported sources. Check the advertiser identity on each platform before comparing the messages.
Keep the platform IDs, dates and media links. Review the creatives before tagging hooks, offers and product angles. Claude can organize your findings and suggest tests, with the original sources attached.
The brief can compare messages across channels and show which records or fields are missing.
Explore Meta Ad LibraryLet’s talk about
your project.
Tell me what you need to collect or understand. I can help with a custom scraper, a pipeline or the analysis.
Start a project