Overview
CreatorDB supports searching YouTube, Instagram, and TikTok content. Search for specific videos, shorts, streams, reels, and image posts across every creator in the CreatorDB database. Each result carries the content’s own metadata and engagement metrics, plus a short summary about the content creator. This is the inverse of creator search.- Creator search: Answers “which creators match my criteria?” and returns a list of creators.
- Content search: Answers “which posts match my criteria?” and returns a list of posts.
Use content search when the thing you are looking for is a post: a video sponsored by a competitor’s brand, a reel using a hashtag you are tracking, or the top-performing shorts in a category this week. To find creators instead, see Configuring Custom Search Filters and Examples. To pull a known creator’s recent posts, use that platform’s
content-detail endpoint.Before you start
- Get an API key. For details, see Authentication.
- Read Credit cost. The price of each call depends on the time window you search, whether you search caption or description text, and whether you limit results to larger creators. You can work out the price before you send the request.
- Decide which platform you are searching. Cross-platform content search is not supported. Each platform has its own endpoint and its own filter allowlist.
How content search works
Send aPOST request to the content-search endpoint for the platform you want:
filters array, a pageSize, and an offset. By default, results are sorted by publishTime in descending order (newest first). Set sortBy to change the order.
Content search covers the recent posts that CreatorDB stores for each creator, not every post a creator has ever published. A request with no time window searches content published in the last 30 days. For details, see Searching a time window.
Request parameters
These parameters are the same on YouTube, Instagram, and TikTok.Searching a time window
Every content search covers a publish-time window. The window decides which content can match, and its length is one of the inputs to the price. If you don’t set one, the search covers the last 30 days. You set it in two ways, and you can combine them.timeRangetakes absolute times:{ "from": 1788220800000, "to": 1790812800000 }. Both values are Unix timestamps in milliseconds.fromis inclusive andtois exclusive, so the range is[from, to). If you leave outto, the range ends at the time of the request.- The
publishTimefilter takes a number of days before the time of the request.{ "filterName": "publishTime", "op": "<", "value": 30 }means the last 30 days.
The effective window
The window CreatorDB searches, and prices, is the overlap oftimeRange and every publishTime filter in the request. This is the effective window. A request with only publishTime filters has an effective window too.
If the effective window is empty, for example because
timeRange and publishTime don’t overlap, the request returns 400 VALIDATION_ERROR. It isn’t billed. For details, see Common errors.
The applied window in the response
Every response returns the window that was searched indata.timeRange, with to filled in and any publishTime filter applied. Use it to confirm what you searched and paid for.
isDefaultistruewhen the request set neithertimeRangenor apublishTimefilter, so the search used the 30-day default.fromisnullwhen the window has no start, for example a request with onlypublishTime > 30.
Two kinds of filters
Every content-search allowlist is split into two groups, and you can combine them freely in a single request.- Content-level filters apply to the post itself: how many views it got, when it was published, which hashtags it uses, whether it is sponsored.
- Creator-level filters apply to the account that published it: follower count, country, niche, audience demographics.
Matching text
isFuzzySearch: true is accepted only on the free-text filters: description, hashtag, creatorDisplayName, creatorBio, and on YouTube title. On any other filter, the request returns 400 VALIDATION_ERROR.
To find content that mentions any of several phrases, use in with isFuzzySearch: true. For example, this filter matches captions that mention either brand:
in takes at most 10 values.
These filters ignore letter case on every platform: title, hashtag, partneredBrands, creatorDisplayName, creatorBio, and creatorCategory. description ignores case and spaces.
Searching one creator’s content
To search within a single creator’s content, add the creator ID filter:
The filter accepts
= for one creator or in for several. Combine it with any other filter, for example to find every sponsored post by one creator over the past year. It doesn’t change the price.
Filter behavior to know before you start
Several filters behave differently from what their names suggest. Open any that apply before building a query.publishTime counts days, not timestamps
publishTime counts days, not timestamps
The
publishTime filter accepts a number of days ago, not a Unix timestamp. To find content from the last 30 days, use { "filterName": "publishTime", "op": "<", "value": 30 }. For absolute dates, use timeRange.The publishTime field in the response is a Unix timestamp in milliseconds. The filter and the response field use different units.description matching ignores case and spaces
description matching ignores case and spaces
The
description filter searches the post text, and the text it searches differs per platform.Matching ignores letter case and spaces, so
"Promo Code" and "promocode" match the same text.- With
isFuzzySearch: true, the value matches anywhere in the text. This is what you want for keyword searches. - Without
isFuzzySearch, the value must match the whole text, so an exactdescriptionmatch rarely returns anything.
audienceAvgAge takes an age range, not an average
audienceAvgAge takes an age range, not an average
Despite its name, the
audienceAvgAge filter takes the creator’s primary audience age range as a string, such as "18-24". It does not take an average age.The /{platform}/audience endpoint returns a field with the same name, audienceAvgAge, as an integer average age, such as 30. Don’t pass that integer to this filter.followers uses a daily snapshot
followers uses a daily snapshot
The
followers filter compares against a snapshot of each creator’s follower count that CreatorDB refreshes once a day. The follower count returned in each result (creator.totalSubscribers on YouTube, creator.totalFollowers on Instagram and TikTok) is read from the creator’s current record, so it can differ slightly from the value the filter used. A creator just above your followers threshold can show a count just below it, and the other way around.Performance ratios compare a creator against themselves
Performance ratios compare a creator against themselves
performanceViews, performanceLikes, performanceDiggs, and performanceEngagement are ratios against that creator’s own average, not against the platform, the category, or any other creator.A value of 1.5 means the content performed 50% above the average for the account that posted it. Filtering on performanceEngagement > 1.2 finds posts that outperformed their own channel, which surfaces breakout content from small accounts as readily as from large ones.Sponsored content is detected differently on each platform
Sponsored content is detected differently on each platform
partneredBrands accepts a brand ID, not a brand name
partneredBrands accepts a brand ID, not a brand name
Brand IDs are typically the brand’s primary domain. Filter for Acer with
"value": "acer.com", not "Acer". The same IDs are returned in the partneredBrands response field.Post types differ per platform
Post types differ per platform
The
postType filter accepts different values on YouTube and Instagram, and TikTok has no postType filter at all because it returns only videos. Any other value returns 400 VALIDATION_ERROR.On Instagram, both single-image posts and multi-image carousels are returned as
slideshow. The response doesn’t distinguish between them. Passing postType: video on Instagram only matches some videos, since many videos are stored as slideshow.On YouTube and Instagram, postType also affects the price.Credit cost
Content search is priced per call. The price comes from your request alone, not from how many results come back, so you can work it out before you send the request. Every call costs at least 1 credit.What sets the price
Prices by platform
- YouTube
- Instagram
- TikTok
Credits per call for
POST /youtube/content-search.Working out a price
Take this YouTube request:- Time window:
timeRangecovers September 1 to October 1, 2026, which is exactly 30 days, so it’s in the 30 days or less tier. descriptionfilter: Present.- Creator floor:
followers > 100000, so 100K+. - Content type: No
postType, so Any type.
followers filter costs 17 credits. Limited to Shorts with postType: "shorts", it costs 2. Without timeRange, it searches the last 30 days, which is in the same tier, so the price stays 6.
How to lower the cost
- Search a shorter window. Shorter windows cost less. A request with no window searches the last 30 days. A 7-day window costs less, and a window longer than 30 days, or one with no start, costs more.
- Add a 100K+ creator floor. If you only care about larger creators, add
{ "filterName": "followers", "op": ">", "value": 100000 }. On windows longer than 30 days, this often cuts the price by half or more. - Pick one content type. On YouTube and Instagram, searching only Shorts, long videos, reels, or posts costs less than searching every type.
- Search text only when you need it. A
descriptionfilter usually costs several times more than the same request without it. On YouTube, if the word you’re looking for is likely in the video title, use thetitlefilter instead.titledoesn’t add to the price.
Empty results and pagination
- A search that matches nothing is still billed. The price is for running the search, not for the results, so an empty
contentListcosts the same as a full one. - Every page is billed. Each call with a new
offsetis a new search and bills the full price again. Paging through 10 pages of a 6-credit search costs 60 credits. - Failed requests aren’t billed. A request rejected with
400 VALIDATION_ERROR, including an empty effective window, uses no credits.
What you get back
All three platforms return the same envelope: acontentList array, plus pagination fields.
totalResults is an estimate. It can count content that can no longer be loaded, for example because the post was removed. Each page returns pageSize items when that many matches remain, and nextOffset can be more than offset plus pageSize because it skips over content that couldn’t be loaded. Always page with the returned nextOffset instead of calculating the next offset yourself.contentList includes a creator object. This is a lightweight summary that includes the handle or channel ID, display name, avatar, and follower count. For full creator details, call the /{platform}/profile endpoint with the ID returned here.
Filter names and response field names
Some filters use a different name from the response field that holds the same data.Content search by platform
- YouTube
- Instagram
- TikTok
YouTube content search
Method:POST Endpoint:
https://apiv3.creatordb.app/youtube/content-searchContent-level filters
Creator-level filters
YouTube engagement rate is calculated as (likes + comments) / views, and the response rounds
engagementRate to four decimal places.- Request example
- Response example
Find high-performing sponsored long videos from the last 30 days, posted by channels with over 100,000 subscribers. Long videos, 30 days or less, no Find every video that mentions “promo code” in its description during September 2026, from channels with over 100,000 subscribers. Any type, 30 days or less, with Find every video sponsored by a specific brand in the last 90 days. Any type, 90 days or less, no Find trending shorts carrying a hashtag this week, from creators reaching a specific audience. Shorts, 7 days or less, no
description, 100K+: 1 credit.description, 100K+: 6 credits.description, all creators: 5 credits.description, all creators: 1 credit.Paginating results
Sendoffset: 0 on your first call. If the response has hasNextPage: true, send the returned nextOffset as the offset of your next request, keeping every other parameter the same.
For example, the second request for a query that returns 100 results per page:
Common errors
Invalid requests return400 VALIDATION_ERROR and aren’t billed. The details array names each field that failed and why.
For all error codes and the response envelope, see Error Codes.
Platform differences at a glance
Troubleshooting
For error codes and the response envelope, see Error Codes. Besides the common errors above, the most common content-search mistakes are:- Paying more than expected. Check the four price inputs in Credit cost. A window longer than 30 days, or one with no start such as
publishTime > 30on its own, is priced in a higher tier. - Missing older content. A request with no
timeRangeand nopublishTimefilter only searches the last 30 days. Checkdata.timeRange.isDefault, and settimeRangeto search further back. - Getting no results from a
descriptionsearch. SetisFuzzySearchtotrue. Without it, the value must match the whole caption or description. To match any of several phrases, useinwithisFuzzySearch: true. - Passing an average age to
audienceAvgAge. The filter takes an age-range string, such as18-24. - Sorting on a field that is not sortable. Check the Sortable column in the tables above.
- Using a brand name in
partneredBrands. Use the brand ID, typically a domain such asacer.com. - Sending an empty
filtersarray or an emptyinarray. Include at least one filter, and at least one value in everyinarray. - Sending more than 10 filters or an
inarray longer than 100 values. For the limits, see Request parameters. - Filtering on
isSponsoredfor TikTok. TikTok sponsored-content detection is not built.