API Documentation

Integrate AdScan ad tracking, boards, and company intelligence into your applications.

Authentication

All requests require an API key sent via the Authorization header:

Authorization: Bearer adscan_live_your_api_key_here

Create and manage API keys below or from the API Keys page in your dashboard.

Your API Keys

Base URL

https://adscan.ai/api/v1/trpc

All endpoint paths below are appended to this base URL.

Making Requests

AdScan uses the tRPC protocol. Each procedure is available at:

/api/v1/trpc/<router>.<procedure>

Queries (read data)

Use GET with the input JSON-encoded in the input query parameter:

GET /api/v1/trpc/boards.list
Authorization: Bearer adscan_live_...

Mutations (write data)

Use POST with a JSON body:

POST /api/v1/trpc/boards.create
Authorization: Bearer adscan_live_...
Content-Type: application/json

{ "name": "My Board" }

Endpoints

Boards

GETboards.listList all your boards
POSTboards.createCreate a new board
POSTboards.updateUpdate board name or order
POSTboards.removeDelete a board
POSTboards.updateSlugSet a custom URL slug
POSTboards.updateDescriptionUpdate board description
POSTboards.togglePublicMake a board public or private
GETboards.checkSlugAvailabilityCheck if a slug is available

Ads

GETads.listList ads with filters (board, search, platform, etc.)
GETads.getDetailsGet full ad details by hash
POSTads.addToBoardSave an ad to a board
POSTads.removeFromBoardRemove an ad from a board
POSTads.deletePermanently delete an ad
GETads.listBoardsContainingFind which boards contain an ad
GETads.getFilterValuesGet available filter options
GETads.listTopCompaniesGet top advertisers
GETads.getClonePayloadGet AI clone payload for an ad

Companies

POSTcompanies.followFollow a company for notifications
POSTcompanies.unfollowUnfollow a company
GETcompanies.listFollowedList companies you follow
GETcompanies.isFollowingCheck if you follow a company

Brand Spy

GETbrandSpy.getHeaderGet brand header info (logo, name)
GETbrandSpy.getOverviewGet brand overview and stats
GETbrandSpy.getAdCopiesGet brand ad copy analysis
GETbrandSpy.getHeadlinesGet brand headline analysis
GETbrandSpy.getLandingPagesGet brand landing pages
GETbrandSpy.getTimelineGet brand ad timeline
GETbrandSpy.listTopAdvertisersList top advertisers globally

Notifications

GETnotifications.listList your notifications
GETnotifications.unreadCountGet unread notification count
POSTnotifications.markReadMark notifications as read
GETnotifications.listRulesList notification rules
POSTnotifications.upsertRuleCreate or update a notification rule
POSTnotifications.deleteRuleDelete a notification rule

Teams

GETteams.listList your teams
GETteams.getGet team details
POSTteams.createCreate a new team
POSTteams.updateUpdate team settings
POSTteams.deleteDelete a team
GETteams.listMembersList team members
POSTteams.inviteByEmailInvite a user by email
POSTteams.removeMemberRemove a team member

API Keys

GETapiKeys.listList your API keys
POSTapiKeys.createCreate a new API key
POSTapiKeys.revokeRevoke an API key

AI Images

GETaiImages.listList your generated AI images
POSTaiImages.deleteDelete a generated image

Clone Products

GETcloneProducts.listList your products
GETcloneProducts.getGet a specific product
POSTcloneProducts.createCreate a new product
POSTcloneProducts.updateUpdate a product
POSTcloneProducts.deleteDelete a product
POSTcloneProducts.setDefaultSet a product as default
POSTcloneProducts.inspectWebsiteInspect a website for product info

Brand Images

GETbrandImages.listList your brand assets
POSTbrandImages.deleteDelete a brand asset

Searching Ads

The ads.list endpoint supports powerful filtering. All parameters are optional — combine them freely.

ParameterTypeDescription
searchQuerystringSearch ad copy, headlines, advertiser names, and landing page URLs
boardIdnumber | "ALL"Filter to a specific board, or "ALL" for all your boards
platformsstring[]facebook, instagram, youtube, linkedin, tiktok
formatsstring[]video, image, carousel, dco, dpa, other
companyNamesstring[] | "FOLLOWED"Filter by advertiser names, or "FOLLOWED" for companies you follow
adTypesstring[]Filter by category (use ads.getFilterValues to see available types)
languagesstring[]Filter by language
ctaTypesstring[]Filter by call-to-action text (e.g. "Shop Now", "Learn More")
isPartnershipbooleanFilter for partnership/influencer ads
viewsMin / viewsMaxnumberFilter by estimated reach range
dateFrom / dateTostring (ISO)Filter by date range
sortBystringrecommended, date, views, likes, or comments
limitnumberResults per page (default: 20)
cursornumberPass nextCursor from previous response to get next page

Playground

Test the ads.list endpoint live. Enter your API key, set filters, and hit Send.

curl "https://adscan.ai/api/v1/trpc/ads.list?input=%7B%22limit%22%3A5%7D" \
  -H "Authorization: Bearer adscan_live_your_api_key_here"

Examples

List boards

curl "https://adscan.ai/api/v1/trpc/boards.list" \
  -H "Authorization: Bearer adscan_live_your_api_key_here"

Response:

{
  "result": {
    "data": [
      {
        "id": 1,
        "name": "My Board",
        "order": 0,
        "published": true,
        "createdAt": "2024-01-01T00:00:00.000Z",
        "authorId": "user123",
        "views": 0,
        "parentBoardId": null
      }
    ]
  }
}

Create a board

curl -X POST "https://adscan.ai/api/v1/trpc/boards.create" \
  -H "Authorization: Bearer adscan_live_your_api_key_here" \
  -H "Content-Type: application/json" \
  -d '{ "name": "My New Board" }'

Response:

{
  "result": {
    "data": {
      "id": 42,
      "name": "My New Board",
      "parentId": null
    }
  }
}

Search ads by text

Use searchQuery to search across ad copy, headlines, and advertiser names.

curl "https://adscan.ai/api/v1/trpc/ads.list?input=%7B%22searchQuery%22%3A%22free%20trial%22%2C%22limit%22%3A5%7D" \
  -H "Authorization: Bearer adscan_live_your_api_key_here"

# Decoded input: {"searchQuery":"free trial","limit":5}

Response:

{
  "result": {
    "data": {
      "ads": [
        {
          "id": 12345,
          "platform": "facebook",
          "displayFormat": "video",
          "createdAt": "2025-12-15T10:30:00.000Z",
          "advertiser": { "id": 1, "name": "Acme Corp", "profilePicUrl": "..." },
          "cards": [
            {
              "position": 0,
              "title": "Start Your Free Trial Today",
              "body": "Try Acme for 14 days — no credit card required.",
              "linkUrl": "https://acme.com/trial",
              "ctaText": "Sign Up",
              "mediaUrl": "...",
              "mediaType": "video"
            }
          ],
          "engagement": { "reach": 50000, "likes": 320, "comments": 45 }
        }
      ],
      "nextCursor": 12344,
      "hasMore": true,
      "queryDurationMs": 42
    }
  }
}

Search ads by website

searchQuery also matches landing page URLs, so you can find ads pointing to a specific domain.

curl "https://adscan.ai/api/v1/trpc/ads.list?input=%7B%22searchQuery%22%3A%22shopify.com%22%2C%22platforms%22%3A%5B%22facebook%22%5D%2C%22limit%22%3A10%7D" \
  -H "Authorization: Bearer adscan_live_your_api_key_here"

# Decoded input: {"searchQuery":"shopify.com","platforms":["facebook"],"limit":10}

List ads with filters

Combine filters: board, platform, format, date range, views, and sort order.

curl "https://adscan.ai/api/v1/trpc/ads.list?input=%7B%22boardId%22%3A1%2C%22platforms%22%3A%5B%22facebook%22%2C%22instagram%22%5D%2C%22formats%22%3A%5B%22video%22%5D%2C%22sortBy%22%3A%22views%22%2C%22limit%22%3A20%7D" \
  -H "Authorization: Bearer adscan_live_your_api_key_here"

# Decoded input: {"boardId":1,"platforms":["facebook","instagram"],"formats":["video"],"sortBy":"views","limit":20}

Follow a company

curl -X POST "https://adscan.ai/api/v1/trpc/companies.follow" \
  -H "Authorization: Bearer adscan_live_your_api_key_here" \
  -H "Content-Type: application/json" \
  -d '{ "companyName": "Nike" }'

Error Handling

The API returns standard HTTP status codes:

StatusMeaning
200Success
401Invalid or missing API key
403Not allowed to access this resource
404Resource not found
429Rate limit exceeded
500Internal server error

Error responses include a JSON body with an error object containing a message field.

Rate Limits

API requests are rate-limited to prevent abuse. If you exceed the limit you will receive a 429 response. Contact support if you need higher limits for your integration.

Support

Questions or issues? Reach us at [email protected]