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
boards.listList all your boardsboards.createCreate a new boardboards.updateUpdate board name or orderboards.removeDelete a boardboards.updateSlugSet a custom URL slugboards.updateDescriptionUpdate board descriptionboards.togglePublicMake a board public or privateboards.checkSlugAvailabilityCheck if a slug is availableAds
ads.listList ads with filters (board, search, platform, etc.)ads.getDetailsGet full ad details by hashads.addToBoardSave an ad to a boardads.removeFromBoardRemove an ad from a boardads.deletePermanently delete an adads.listBoardsContainingFind which boards contain an adads.getFilterValuesGet available filter optionsads.listTopCompaniesGet top advertisersads.getClonePayloadGet AI clone payload for an adCompanies
companies.followFollow a company for notificationscompanies.unfollowUnfollow a companycompanies.listFollowedList companies you followcompanies.isFollowingCheck if you follow a companyBrand Spy
brandSpy.getHeaderGet brand header info (logo, name)brandSpy.getOverviewGet brand overview and statsbrandSpy.getAdCopiesGet brand ad copy analysisbrandSpy.getHeadlinesGet brand headline analysisbrandSpy.getLandingPagesGet brand landing pagesbrandSpy.getTimelineGet brand ad timelinebrandSpy.listTopAdvertisersList top advertisers globallyNotifications
notifications.listList your notificationsnotifications.unreadCountGet unread notification countnotifications.markReadMark notifications as readnotifications.listRulesList notification rulesnotifications.upsertRuleCreate or update a notification rulenotifications.deleteRuleDelete a notification ruleTeams
teams.listList your teamsteams.getGet team detailsteams.createCreate a new teamteams.updateUpdate team settingsteams.deleteDelete a teamteams.listMembersList team membersteams.inviteByEmailInvite a user by emailteams.removeMemberRemove a team memberAPI Keys
apiKeys.listList your API keysapiKeys.createCreate a new API keyapiKeys.revokeRevoke an API keyAI Images
aiImages.listList your generated AI imagesaiImages.deleteDelete a generated imageClone Products
cloneProducts.listList your productscloneProducts.getGet a specific productcloneProducts.createCreate a new productcloneProducts.updateUpdate a productcloneProducts.deleteDelete a productcloneProducts.setDefaultSet a product as defaultcloneProducts.inspectWebsiteInspect a website for product infoBrand Images
brandImages.listList your brand assetsbrandImages.deleteDelete a brand assetSearching Ads
The ads.list endpoint supports powerful filtering. All parameters are optional — combine them freely.
| Parameter | Type | Description |
|---|---|---|
searchQuery | string | Search ad copy, headlines, advertiser names, and landing page URLs |
boardId | number | "ALL" | Filter to a specific board, or "ALL" for all your boards |
platforms | string[] | facebook, instagram, youtube, linkedin, tiktok |
formats | string[] | video, image, carousel, dco, dpa, other |
companyNames | string[] | "FOLLOWED" | Filter by advertiser names, or "FOLLOWED" for companies you follow |
adTypes | string[] | Filter by category (use ads.getFilterValues to see available types) |
languages | string[] | Filter by language |
ctaTypes | string[] | Filter by call-to-action text (e.g. "Shop Now", "Learn More") |
isPartnership | boolean | Filter for partnership/influencer ads |
viewsMin / viewsMax | number | Filter by estimated reach range |
dateFrom / dateTo | string (ISO) | Filter by date range |
sortBy | string | recommended, date, views, likes, or comments |
limit | number | Results per page (default: 20) |
cursor | number | Pass 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:
| Status | Meaning |
|---|---|
200 | Success |
401 | Invalid or missing API key |
403 | Not allowed to access this resource |
404 | Resource not found |
429 | Rate limit exceeded |
500 | Internal 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]