All Java tutorials

How to scrape Facebook Ad Library Search Ads with Java

Search This tutorial gets it with a short Java program and the Facebook Ad Library Search Ads API. Each successful call costs 1 credit; errors and not-found answers are free.

1. Get an API key

Sign in to get a key and 100 free credits, no card. Then put the key in an environment variable so it stays out of your code:

export SCRAPEIO_API_KEY="your_key_here"

2. Set up Java

Java 11 or newer; HttpClient is built in

3. Write the code

Save this as Scrape.java.

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;

public class Scrape {
    static String enc(String s) {
        return URLEncoder.encode(s, StandardCharsets.UTF_8);
    }

    public static void main(String[] args) throws Exception {
        String query = "query=" + enc("coffee");
        HttpRequest req = HttpRequest.newBuilder()
            .uri(URI.create("https://scrapeio.com/v1/facebook/adLibrary/search/ads?" + query))
            .header("x-api-key", System.getenv("SCRAPEIO_API_KEY"))
            .build();
        HttpResponse<String> res = HttpClient.newHttpClient().send(req, HttpResponse.BodyHandlers.ofString());
        if (res.statusCode() != 200) throw new RuntimeException("HTTP " + res.statusCode());
        System.out.println(res.body());
    }
}

This prints the first page. To get the next one, send the value of data.cursor as the cursor parameter and call again until data.has_more is false.

4. Run it

java Scrape.java

The response has the same envelope on every endpoint: success, cached, credits_used, credits_remaining and data. Shared fields such as handle, followers, plays, likes and created_at have the same names on every platform.

Parameters

NameTypeDescription
query (required)stringKeyword to search for
sort_bytotal_impressions, relevancy_monthly_groupedSort by impressions (high to low), or Most Recent (relevancymonthlygrouped).
search_typekeyword_unordered, keyword_exact_phraseIf you want to search by exact phrase or not
ad_typeall, political_and_issue_adsSearch for all ads or only political and issue ads
countrystringThis can only be one country.
languagestringLanguage to filter ads on.
statusALL, ACTIVE, INACTIVEStatus of the ad.
media_typeALL, IMAGE, VIDEO, MEME, IMAGE_AND_MEME, NONEMedia type of the ad.
start_datestringImpressions start date.
end_datestringImpressions end date.
trimbooleanSet to true for a trimmed down version of the response
cursorstringCursor to paginate through results

Errors and what you pay

StatusMeaningCharged
200SuccessYes, unless cached
400A parameter is missing or wrongNo
401The key is missing or invalidNo
402Not enough creditsNo
403The account or post is privateNo
404Not found on the platformNo
429More than 300 requests a minuteNo
502Every source is down; retry shortlyNo

Same endpoint in other languages

Python · Node.js · JavaScript · TypeScript · Go · Rust · C# · PHP · Ruby · Kotlin · Swift · R

Prefer no code?

Connect the MCP server to Claude Code, Cursor or Codex and ask in plain English. The agent uses call_endpoint with path /v1/facebook/adLibrary/search/ads for you.

100 free credits, no card. Credits never expire.

Get API key

More Facebook Ad Library tutorials in Java