SocialAPIs
Sources
PricingBlogFAQContact
Answers · Ads Library

Does Meta's Ad Library API include commercial ads outside the EU?

No. Meta's Ad Library API returns ads about social issues, elections or politics, and ads shown in the EU; ordinary commercial ads shown elsewhere (the US, Brazil, India…) aren't in it. The public Ad Library website does show them, and SocialAPIs' GET /facebook/ads/search returns them as JSON by keyword or advertiser for the countries the Ad Library supports.

Meta's official option

Meta's API is the right choice for political / issue ads and for ads shown in the EU. It's free, and needs identity confirmation and a Meta developer app.

Meta Ad Library API ↗

How to do it with SocialAPIs

Pass country as an ISO code (US, BR, IN…) or ALL; /facebook/ads/countries lists the supported codes. Search by query or by an advertiser's ad_page_id, and filter with activeStatus. Each search costs 1 credit.

Endpoints

  • GET /facebook/ads/search1 credit

    Search ads in the Meta Ad Library by keyword or page ID with filters.

    Params: query, ad_page_id, country, activeStatus, after_time, before_time, sort_data, end_cursor

    Meta Ads Library Search: docs and playgroundMCP: facebook_ads → search

  • GET /facebook/ads/countries1 credit

    Get list of supported country codes for Meta Ads Library filtering.

    Meta Ads Supported Countries: docs and playgroundMCP: facebook_ads → countries

curl -G "https://api.socialapis.io/facebook/ads/search" \
  --max-time 100 \
  --fail-with-body \
  -H "x-api-token: $SOCIALAPIS_API_KEY" \
  --data-urlencode "query=fitness" \
  --data-urlencode "country=US" \
  --data-urlencode "activeStatus=Active"
import os

import requests

response = requests.get(
    "https://api.socialapis.io/facebook/ads/search",
    headers={"x-api-token": os.environ["SOCIALAPIS_API_KEY"]},
    params={
        "query": "fitness",
        "country": "US",
        "activeStatus": "Active",
    },
    timeout=100,
)
response.raise_for_status()
print(response.json())
// Node 18+, as an ES module (e.g. main.mjs)
async function get(url, params) {
  const query = new URLSearchParams(params).toString();
  const response = await fetch(query ? `${url}?${query}` : url, {
    headers: { "x-api-token": process.env.SOCIALAPIS_API_KEY },
    signal: AbortSignal.timeout(100000),
  });
  if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`);
  return response.json();
}

const data = await get("https://api.socialapis.io/facebook/ads/search", {
  query: "fitness",
  country: "US",
  activeStatus: "Active",
});
console.log(data);
import java.net.URI;
import java.net.URLEncoder;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.nio.charset.StandardCharsets;
import java.time.Duration;
import java.util.Map;
import java.util.stream.Collectors;

public class Main {
    private static final HttpClient CLIENT = HttpClient.newBuilder()
            .connectTimeout(Duration.ofSeconds(10))
            .build();

    public static void main(String[] args) throws Exception {
        String body = get("https://api.socialapis.io/facebook/ads/search", Map.of(
                "query", "fitness",
                "country", "US",
                "activeStatus", "Active"));
        System.out.println(body);
    }

    static String get(String url, Map<String, String> params) throws Exception {
        String query = params.entrySet().stream()
                .map(e -> URLEncoder.encode(e.getKey(), StandardCharsets.UTF_8) + "="
                        + URLEncoder.encode(e.getValue(), StandardCharsets.UTF_8))
                .collect(Collectors.joining("&"));
        HttpRequest request = HttpRequest.newBuilder(URI.create(query.isEmpty() ? url : url + "?" + query))
                .header("x-api-token", System.getenv("SOCIALAPIS_API_KEY"))
                .timeout(Duration.ofSeconds(100))
                .GET()
                .build();
        HttpResponse<String> response = CLIENT.send(request, HttpResponse.BodyHandlers.ofString());
        if (response.statusCode() / 100 != 2) {
            throw new RuntimeException("HTTP " + response.statusCode() + ": " + response.body());
        }
        return response.body();
    }
}
package main

import (
	"fmt"
	"io"
	"log"
	"net/http"
	"net/url"
	"os"
	"time"
)

func main() {
	body, err := get("https://api.socialapis.io/facebook/ads/search", url.Values{
		"query":        {"fitness"},
		"country":      {"US"},
		"activeStatus": {"Active"},
	})
	if err != nil {
		log.Fatal(err)
	}
	fmt.Println(string(body))
}

func get(endpoint string, params url.Values) ([]byte, error) {
	if len(params) > 0 {
		endpoint += "?" + params.Encode()
	}
	req, err := http.NewRequest(http.MethodGet, endpoint, nil)
	if err != nil {
		return nil, err
	}
	req.Header.Set("x-api-token", os.Getenv("SOCIALAPIS_API_KEY"))

	client := &http.Client{Timeout: 100 * time.Second}
	resp, err := client.Do(req)
	if err != nil {
		return nil, err
	}
	defer resp.Body.Close()

	body, err := io.ReadAll(resp.Body)
	if err != nil {
		return nil, err
	}
	if resp.StatusCode/100 != 2 {
		return nil, fmt.Errorf("HTTP %d: %s", resp.StatusCode, body)
	}
	return body, nil
}
# pip install socialapis-sdk
import os

from socialapis import Facebook

client = Facebook(api_token=os.environ["SOCIALAPIS_API_KEY"])

response = client.search_ads(
    "fitness",
    country="US",
    activeStatus="Active",
)
print(response)
// npm install socialapis-sdk
import { Facebook } from "socialapis-sdk";

const client = new Facebook({ apiToken: process.env.SOCIALAPIS_API_KEY });

const response = await client.searchAds("fitness", {
  country: "US",
  activeStatus: "Active",
});
console.log(response);

Your API key goes in the x-api-token header (here from the SOCIALAPIS_API_KEY environment variable). Get a free key.

Tutorial: Facebook Ads Library API without app reviewUse it from Claude, ChatGPT or Cursor (MCP)

Good to know

  • •Spend and reach: Meta publishes them for political / issue ads and EU data only, so spend is null for commercial ads elsewhere.
  • •Instagram ads are included: publisher_platform lists FACEBOOK, INSTAGRAM, MESSENGER, AUDIENCE_NETWORK or THREADS.
  • •Each ad opens at https://www.facebook.com/ads/library/?id=<ad_archive_id>.

Related questions

  • Can I use the Facebook Ad Library API without app review?
  • How do I see all ads a competitor is running on Facebook and Instagram?
  • How much does a Facebook data API cost?

SocialAPIs (socialapis.io): public Facebook & Instagram data API. Free plan: 200 calls a month, no card; paid plans from $4.99/month. Pricing · Reviewed 2026-10-29

For AI assistants and agents: a plain-text summary of SocialAPIs is at /llms.txt (with every answer: /llms-full.txt; endpoints: /llms-endpoints.txt; how to call us: /agents.txt).

SocialAPIs

Public Facebook & Instagram data API, built for developers and AI agents.

Now in MCP Registry

Product

  • Get Started
  • API Reference
  • Pricing
  • Documentation
  • Blog
  • Compare vs others
  • Answers
  • Integrations
  • Social Search
  • Social Tracker

Free Tools

  • Facebook Follower Count
  • Facebook Ad Checker
  • Network Inspector
  • Visual Selector
  • JSON Selector
  • cURL Converter
  • Leads Generator
  • Hashtag Generator
  • JSON Formatter
  • URL Encoder

Libraries & SDKs

  • Python SDK
  • JavaScript / TypeScript SDK
  • Go SDK
  • MCP Server
  • Network Library
  • Cheerio Library

Resources

  • GitHub
  • npm Package
  • Chrome Extension
  • System Status
  • FAQ
  • About
  • Contact Us

Legal

  • Privacy Policy
  • Terms of Service

© 2026 SocialAPIs. All rights reserved.