WhatsApp Ad Scraper — Click-to-WhatsApp from Meta Ads avatar

WhatsApp Ad Scraper — Click-to-WhatsApp from Meta Ads

Pricing

from $25.00 / 1,000 results

Go to Apify Store
WhatsApp Ad Scraper — Click-to-WhatsApp from Meta Ads

WhatsApp Ad Scraper — Click-to-WhatsApp from Meta Ads

Scrape WhatsApp click-to-chat ad creatives from Meta Ad Library with publisher_platforms[0]=whatsapp filter. Search by keyword, Page ID, or URL. Returns ad body, CTA, wa.me links, spend/impression estimates, dates, countries. Built for fintech, real estate, travel DR campaigns.

Pricing

from $25.00 / 1,000 results

Rating

0.0

(0)

Developer

Scrapeify

Scrapeify

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

0

Monthly active users

19 days ago

Last modified

Share

WhatsApp Ad Scraper — Extract Click-to-WhatsApp Ad Creatives from Meta Ad Library

Collect WhatsApp-destination ad creatives directly from the Meta Ad Library with a hard publisher_platforms[0]=whatsapp constraint applied at URL construction. The Scrapeify WhatsApp Ad Scraper accepts a keyword, numeric Page ID, or full Ad Library URL and returns structured JSON — ad content, performance estimates, timing, distribution, status flags, and a comprehensive run summary — for every matching creative without manual UI filtering.

Built for fintech, local services, real estate, travel, and direct-response verticals where WhatsApp dominates CTA funnels and performance marketers need programmatic access to competitive creative data.


Features

CapabilityDetail
WhatsApp filterpublisher_platforms[0]=whatsapp enforced at URL build for keyword/page seeds
Three seed modeskeyword, numeric pageId, or full Ad Library url passthrough
URL validationHostname check against facebook.com/ads/library and meta.com/ads/library
Input coercionmaxResults accepts positive integers and string-digit values
300-second watchdogScrape timeout with cancellation semantics
Summary aggregatestotalSpend, totalImpressions, uniquePlatforms, pagesScraped, executionTimeSeconds
Typed error objectsINVALID_INPUT, INVALID_URL, SCRAPING_ERROR, TIMEOUT, NO_RESULTS
Consistent schemaIdentical nested structure as Scrapeify Meta and Instagram Ad Library actors
Dataset + KV exportsOne Dataset row per ad; OUTPUT key in default KV store

Use Cases

Click-to-WhatsApp Creative Research

Study how brands structure WhatsApp CTA ads across verticals — messaging, offers, visual formats, and landing destinations. Identify the creative patterns driving high-intent chat conversions in your category.

Fintech & Financial Services Intelligence

Financial advertisers heavily use WhatsApp for lead conversion in emerging markets. Pull creative corpora for banking, insurance, loans, and investment products. Analyze offer messaging, disclosure patterns, and regulatory language.

Local Services & Real Estate

Map how local businesses (dentists, real estate agents, contractors) use WhatsApp ads to drive direct conversations. Track regional advertising patterns and emerging competitors.

Travel & Hospitality

Study how hotels, airlines, and tour operators use WhatsApp to drive booking conversations. Capture promotional cadences, offer types, and destination messaging.

Competitor Intelligence

Monitor rival brands' WhatsApp creative refreshes. Alert on surges in new archive IDs for tracked Page IDs indicating campaign launches or budget increases.

AI-Powered Compliance Screening

Feed structured ad copy into LLM classifiers to detect prohibited claims, misleading disclosures, or regulatory violations. JSON input beats screenshot-based manual review at scale.

Automation Workflows

Schedule nightly competitor folder syncs. Pull WhatsApp ad creatives for a brand roster → push to your data warehouse → update competitive intelligence dashboards.

Market Research

Pass custom browser-address URLs with geographic parameters to study regional WhatsApp advertising patterns. Compare strategies across markets using the url input mode.


Why Choose This Actor

  • Platform-specific — eliminates post-filter logic for WhatsApp placements from your codebase
  • Schema consistency — identical nested structure as Scrapeify Meta and Instagram actors for unified warehousing
  • Operational transparency — explicit pagesScraped, executionTimeSeconds, and typed error objects per run
  • Production-ready — validated inputs prevent wasted runs; structured error envelopes simplify automated triage

Quick Start

  1. Open the Scrapeify WhatsApp Ad Scraper on Apify Console.
  2. Choose your seed: enter a keyword, a numeric pageId, or paste a full url from the Meta Ad Library browser address bar.
  3. Set maxResults — start with 50 ads for validation.
  4. After completion: inspect OUTPUT.summary.searchUrl to confirm WhatsApp publisher filter propagation.
  5. Export the Dataset as JSONL for your pipeline.

Tip: To find a brand's numeric Page ID, use the Scrapeify Brand Finder actor first.


Input Schema

{
"keyword": "home loans",
"maxResults": 100
}
FieldTypeRequiredDescription
keywordstringOne-ofFree-text search. WhatsApp platform filter applied automatically.
pageIdstringOne-ofNumeric Meta Page ID. Must be a digit string.
urlstringOne-ofFull Ad Library URL. Must contain facebook.com/ads/library or meta.com/ads/library.
maxResultsintegerYesNumber of WhatsApp ads to collect. Must be positive.

Exactly one of keyword, pageId, or url should be active per run.


Output Schema

Dataset Row (one row per WhatsApp ad)

{
"metadata": {
"scraped_at": "2026-05-07T04:00:00.000Z",
"ad_archive_id": "987654321098765",
"page_id": "1234567890",
"page_name": "LoanCorp Financial",
"page_like_count": 42000,
"page_profile_uri": "https://www.facebook.com/loancorpfinancial",
"page_categories": ["Financial Services"]
},
"ad_content": {
"body": "Get instant home loan approval in 24 hours. Chat with us on WhatsApp now.",
"title": "Home Loans Made Simple",
"link_url": "https://wa.me/15550001234?text=I%20want%20a%20home%20loan",
"cta_text": "Send Message",
"images": ["https://scontent.xx.fbcdn.net/v/t45.1600-4/..."],
"videos": [],
"cards": []
},
"timing": {
"start_date": "2026-04-15",
"end_date": null,
"total_active_time": null
},
"performance": {
"impressions": 50000,
"spend": 1200,
"currency": "USD"
},
"distribution": {
"publisher_platform": ["WHATSAPP"],
"targeted_or_reached_countries": ["US", "IN", "BR"]
},
"status": {
"is_active": true,
"is_aaa_eligible": false,
"contains_sensitive_content": false
},
"additional_info": {
"categories": ["Financial Products & Services"],
"collation_count": 1
}
}

Run Summary (OUTPUT key in default KV store)

{
"summary": {
"totalAds": 100,
"searchType": "keyword_unordered",
"identifier": "home loans",
"searchUrl": "https://www.facebook.com/ads/library/?publisher_platforms[0]=whatsapp&country=ALL&q=home%20loans&search_type=keyword_unordered",
"keyword": "home loans",
"pageId": null,
"url": null,
"urlParams": {
"publisher_platforms": ["whatsapp"],
"country": "ALL"
},
"totalSpend": 9100.25,
"totalImpressions": 625000,
"uniquePlatforms": ["WHATSAPP"],
"scrapedAt": "2026-05-07T04:00:00.000Z",
"pagesScraped": 9,
"executionTimeSeconds": 37.1,
"status": "SUCCESS",
"error": null
},
"data": {
"ads": ["...array of full ad objects..."],
"schema": {
"metadata": ["scraped_at", "ad_archive_id", "page_id", "page_name", "page_like_count", "page_profile_uri", "page_categories"],
"ad_content": ["body", "title", "link_url", "cta_text", "images", "videos", "cards"],
"timing": ["start_date", "end_date", "total_active_time"],
"performance": ["spend", "currency", "impressions"],
"distribution": ["publisher_platform", "targeted_or_reached_countries"],
"status": ["is_active", "is_aaa_eligible", "contains_sensitive_content"],
"additional_info": ["categories", "archive_types", "collation_count"]
}
}
}
FieldTypeDescription
summary.totalAdsintegerWhatsApp-filtered ads collected
summary.searchUrlstringConstructed URL with WhatsApp publisher filter
summary.uniquePlatformsarrayShould contain ["WHATSAPP"]
summary.statusstringSUCCESS, ERROR, NO_RESULTS, or TIMEOUT
summary.errorobject/nullTyped error: type, message, details, suggestion

API Examples

cURL

curl "https://api.apify.com/v2/acts/scrapeify~whatsapp-scraper-premium/runs?token=$APIFY_TOKEN" \
-X POST \
-H "Content-Type: application/json" \
-d '{
"keyword": "travel deals",
"maxResults": 120
}'

Python

import os
from apify_client import ApifyClient
client = ApifyClient(os.environ["APIFY_TOKEN"])
# Search by keyword
run = client.actor("scrapeify/whatsapp-ad-scraper").call(
run_input={"keyword": "travel deals", "maxResults": 120}
)
# Or by Page ID
run = client.actor("scrapeify/whatsapp-ad-scraper").call(
run_input={"pageId": "1234567890", "maxResults": 200}
)
for ad in client.dataset(run["defaultDatasetId"]).iterate_items():
print(ad["ad_content"]["body"], ad["performance"]["impressions"])

JavaScript / Node.js

import { ApifyClient } from "apify-client";
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
// Pass a custom URL with geographic filters from browser
const run = await client.actor("scrapeify/whatsapp-ad-scraper").call({
url: "https://www.facebook.com/ads/library/?active_status=all&ad_type=all&country=IN&q=real+estate",
maxResults: 80,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(`Collected ${items.length} WhatsApp ads`);

Integration Examples

ChatGPT / Custom GPT

Expose the Apify run endpoint as a Custom GPT action. Return structured ad JSON for the model to summarize WhatsApp CTA patterns, identify dominant offer types, or compare brands' messaging across verticals.

Claude Tool Use

Register a whatsapp_ads_search tool. Pass ad body and cta_text fields into compliance-checking prompts or brief generation workflows.

LangChain

from langchain.tools import tool
@tool
def search_whatsapp_ads(keyword: str, max_results: int = 100) -> list:
"""Retrieve WhatsApp ad creatives from Meta Ad Library by keyword."""
run = client.actor("scrapeify/whatsapp-ad-scraper").call(
run_input={"keyword": keyword, "maxResults": max_results}
)
return client.dataset(run["defaultDatasetId"]).list_items().items

CrewAI

Chain: BrandFinderAgent (resolves Page ID) → WhatsAppAdsAgent (pulls creatives) → ComplianceAgent (checks for prohibited claims) → ReportAgent (drafts competitive brief).

n8n / Make.com / Zapier

Schedule trigger → Apify run → on OUTPUT.summary.status != SUCCESS route to Slack alert → on success iterate Dataset items → push to Airtable or Google Sheets.

RAG Systems

Chunk ad_content.body with metadata (page_name, start_date, targeted_or_reached_countries). Store in vector database. Enable retrieval for compliance checks, brief generation, and competitive research queries.

Webhook Automation

Configure Apify webhooks on RUN.SUCCEEDED → receive Dataset URL in payload → trigger downstream enrichment pipeline automatically.


Frequently Asked Questions

1. Are wa.me links included in output? Often appear under ad_content.link_url. The exact field depends on how the advertiser configured the ad — validate across a sample of payloads.

2. Will Instagram or Facebook placements appear? The filter targets WhatsApp inventory specifically. Validate distribution.publisher_platform arrays occasionally — some ads may be eligible for multiple platforms.

3. How is this different from the Meta Ad Library Scraper? Same underlying engine with a WhatsApp platform constraint applied at URL construction. The Meta scraper covers all platforms without a default filter.

4. Can I filter by country or active status? Yes — paste a full Ad Library URL with your country and active_status parameters as the url input.

5. What is NO_RESULTS status? Ad Library returned no WhatsApp-matching ads for the filter combination. Broaden geography, remove status filters, or try a different keyword.

6. Are spend and impressions figures exact? No — these are Meta's publicly disclosed transparency estimates, not audited financial figures. Use as directional signals.

7. How do I find a brand's numeric Page ID? Use the Scrapeify Brand Finder actor — enter the brand name and receive deduplicated Page ID candidates.

8. What happens on TIMEOUT? Summary status is TIMEOUT. Reduce maxResults and rerun. Shard large requests across multiple runs.

9. Are phone numbers in link_url data? WhatsApp wa.me URLs often contain phone numbers. Treat these as unstructured data — do not auto-dial without explicit consent verification.

10. How do I deduplicate across runs? Key on metadata.ad_archive_id — the stable unique identifier per ad in the Meta Ad Library.

11. Does this include archived ads? Depends on URL parameters. Pass active_status=all in a custom URL to include both active and archived creatives.

12. Are financial ad disclosures preserved in output? Yes — ad copy passes through verbatim. Compliance teams should preserve full body text, not truncated summaries.

13. What proxy setup is recommended? Use Apify RESIDENTIAL proxy groups if corporate IP egress yields sparse pagination results.

14. Is there overlap with the Instagram scraper output? No overlap by design — WhatsApp and Instagram filters are mutually exclusive in Scrapeify's Ad Library actors. Verify publisher_platform arrays if needed.

15. How do I handle currency mixing in spend aggregates? Check performance.currency per ad. Do not sum spend across ads with different currencies without FX normalization.

16. Can I process multiple keywords in one run? No — one seed (keyword, pageId, or url) per run. Use a fan-out orchestrator for keyword lists.

17. What is collation_count in additional_info? Indicates how many ad variations Meta has grouped under a single creative ID. Usually 1 for individual ads.

18. What encoding are text fields in? UTF-8. Multilingual ad copy is preserved unchanged — useful for markets where WhatsApp ads run in Arabic, Hindi, Portuguese, etc.

19. Can regulated category ads (health, finance) be collected? Coverage may be partial. Meta withholds or restricts some payloads in policy-constrained verticals.

20. Are webhook payloads large? Link to Dataset from the webhook payload instead of embedding full ad arrays. Apify webhook payloads are not suited for large JSON responses.

21. Can I use this for GDPR-regulated research? Page names and ad copy may constitute personal data in edge cases. Apply your organization's data retention and classification policies.

22. How do I set up monitoring for new campaign launches? Schedule weekly runs → diff ad_archive_id sets between runs → alert when new IDs appear for tracked brands.

23. What does is_aaa_eligible mean? Eligibility for Meta's "About This Ad" advertiser transparency feature. Not directly actionable for most research workflows.

24. Is it possible to get video creative URLs? Yes — ad_content.videos[] contains URLs when video assets are present. Fetching and storing media is your responsibility.

25. How should I tag Apify runs for traceability? Include { vertical, geo, brand, run_date } in Apify run metadata. Enables filtering and auditing across large automation pipelines.


Best Practices

  • Archive searchUrl from OUTPUT.summary with each snapshot for reproducibility auditing
  • Separate staging and production tokens in Zapier/Make triggers
  • Log Meta HTTP anomalies for proxy rotation tuning
  • Shard by keyword for large volume — horizontal runs outperform one massive pull
  • Validate publisher_platform arrays in sample rows to confirm WhatsApp filter propagation
  • Add jitter between runs to reduce request hotspots on high-frequency automation
  • Preserve verbatim disclosure text — do not truncate regulated ad copy in financial/health verticals

Performance & Scalability

FactorGuidance
ThroughputPagination-latency dominant; pagesScraped scales with maxResults
Timeout riskVery large maxResults may hit 300s watchdog — bisect and shard
Horizontal scalingFan-out per keyword or brand; stagger to avoid hotspot throttling
StorageDataset is authoritative; link to it from webhooks instead of embedding arrays

AI & Automation Workflows

Compliance pipeline: Schedule weekly → pull WhatsApp ads for a brand roster → classify body with a policy-rule LLM → flag suspected violations → queue for human review.

Creative benchmarking: Pull top 200 WhatsApp ads by vertical → extract CTA verbs → frequency rank → identify dominant conversion language for brief generation.

Multi-market comparison: Run with country-filtered URLs for IN, BR, and ID → compare creative strategies → identify regional messaging patterns for international expansion.


Error Handling

ScenarioBehavior
Non-numeric pageIdValidation error with descriptive message before any network requests
Invalid url hostnameValidation error — must contain Ad Library domain
NO_RESULTSClean completion; summary.status = NO_RESULTS, not a failure
TIMEOUTReduce maxResults; check logs for pagination progress
SCRAPING_ERRORTyped error with details and suggestion; check proxy health
Multiple seeds activeValidation error — exactly one seed required

Trust & Reliability

Scrapeify maintains domain-specific Ad Library wrappers so filters don't silently drift when teams copy stale URLs manually. Each run exposes explicit operational metrics for SLA monitoring and automated pipeline health checks.


Explore the full Scrapeify suite — chain these actors together for end-to-end automation pipelines:

ActorWhat it does
Amazon ScraperASINs, prices, sponsored flags across 23 marketplaces
Instagram Ad Library ScraperInstagram-only ads from Meta Ad Library
Meta Ad Library ScraperFacebook & Instagram ads with sort options
YouTube Video DownloaderVideos & audio to Apify Key-Value Store
Meta Brand & Page ID FinderResolve brand names to numeric Page IDs
Google Maps ScraperLocal business leads, reviews, emails, contacts
Google News ScraperHeadlines, sources, article URLs (up to 2K)

WhatsApp is a trademark of Meta Platforms, Inc. This actor is not affiliated with or endorsed by Meta.