Skip to content
looot docs
Esc
↑↓navigate↵open⌘Jpreview
On this page

Scrape Creators API / Search Ads

ScrapeCreators tool scrapecreators-linkedin-ads-search on looot: input fields, $0.00188 per call, output shape, and code to run it with curl, JavaScript or Python.

Searches the LinkedIn Ad Library by company name, keyword, or companyId with optional country and date filters. Custom date filtering requires both startDate and endDate. LinkedIn accepts dates from the date one year ago through yesterday. Each ad includes id, description, headline, adType, advertiser, targeting details, image or video URLs, totalImpressions, and impressionsByCountry. Date and impression fields are nullable when LinkedIn does not expose them on the public ad page. Supports pagination via paginationToken. Send one of: company, keyword, companyId.

Inputs

Name Type Required Description
company string no The company name to search for. ‘Microsoft’ for example. Example: “microsoft”
companyId string no The company id to search for.
countries string no Comma separated list of countries. Example: US,CA,MX. Example: “US,CA,MX”
endDate string no End date in YYYY-MM-DD format. Must be used with startDate and cannot be today or a future date. Example: “2026-09-01”
keyword string no The keyword to search for. Example: “scraping”
paginationToken string no Pagination token to paginate through results.
startDate string no Start date in YYYY-MM-DD format. Must be used with endDate and cannot be earlier than the date one year ago. Example: “2026-01-01”

Output

Shape of the run’s result, the expected shape, not yet checked against real answers:

{ ads: { id, url, image, video, adType, poster, headline, targeting: { language, location }, advertiser, description, creativeType, organicVideo, preRollVideo, carouselImages: unknown[], preRollAdvertiser }[], success, totalAds, isLastPage, credits_charged, credits_remaining }

Run it

Every call needs your API token in LOOOT_TOKEN; Sign in shows how to get one. Each run also needs a new idempotency key, so a retry never pays twice. With wait: 30 the answer comes back inline when the run ends within 30 seconds. Otherwise you get the running run back: poll GET /v1/runs/<runId>.

Example input with placeholder values:

curl -X POST "https://api.looot.ai/v1/runs" \
  -H "Authorization: Bearer $LOOOT_TOKEN" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{"endpointId":"scrapecreators-linkedin-ads-search","input":{"company":"microsoft","endDate":"2026-09-01","keyword":"scraping","companyId":"Example Inc","countries":"US,CA,MX","startDate":"2026-01-01","paginationToken":"<paginationToken>"},"wait":30}'
const response = await fetch("https://api.looot.ai/v1/runs", {
  method: "POST",
  headers: {
    Authorization: `Bearer ${process.env.LOOOT_TOKEN}`,
    "Content-Type": "application/json",
    "Idempotency-Key": crypto.randomUUID(),
  },
  body: JSON.stringify({
    endpointId: "scrapecreators-linkedin-ads-search",
    input: {
      company: "microsoft",
      endDate: "2026-09-01",
      keyword: "scraping",
      companyId: "Example Inc",
      countries: "US,CA,MX",
      startDate: "2026-01-01",
      paginationToken: "<paginationToken>",
    },
    wait: 30,
  }),
});
const run = await response.json();
console.log(run.status, run.result);
import os
import uuid

import requests

response = requests.post(
    "https://api.looot.ai/v1/runs",
    headers={
        "Authorization": f"Bearer {os.environ['LOOOT_TOKEN']}",
        "Idempotency-Key": str(uuid.uuid4()),
    },
    json={
        "endpointId": "scrapecreators-linkedin-ads-search",
        "input": {
            "company": "microsoft",
            "endDate": "2026-09-01",
            "keyword": "scraping",
            "companyId": "Example Inc",
            "countries": "US,CA,MX",
            "startDate": "2026-01-01",
            "paginationToken": "<paginationToken>",
        },
        "wait": 30,
    },
    timeout=90,
)
run = response.json()
print(run["status"], run.get("result"))

To let looot pick among every provider of this job instead, send job:ads.linkedin.search as endpointId; see the job page.

Was this page helpful?