# TikTok date windows that return nothing, and why

On TikTok Profile Scraper, until is the OLDER edge of the date window and since is the newer one, which is the reverse of the usual convention. Get them the wrong way round and you have asked for a window that ends before it starts, so the run returns nothing and looks exactly like a quiet account.

[![apidojo](/blog/authors/apidojo.png)**Apidojo** *15+ years of experience in data retrieval.*](/blog/authors/apidojo/)

**29 September 2026** Published

**2 min** Read

![Cover card reading "TikTok date windows that return nothing, and why"](/blog/covers/tiktok-since-until.png)

-   until sets the older bound. since sets the newer one. The listing states this three times and is consistent about it.
-   An empty result from a date-filtered run is almost always the pair being swapped, not an account with no posts.
-   maxItems caps the whole run rather than each profile, which is the other way a batch comes back looking empty.
-   Dates take YYYY-MM-DD or a full ISO timestamp.

## The convention, and the exception

Nearly every API that filters by date uses `since` for the earlier bound and `until` for the later one. It reads like English: since January, until March.

TikTok Profile Scraper does the opposite, and it does it consistently. Its input schema describes `until` as returning posts *newer* than the date, and `since` as returning posts *older* than it.

That is not a typo in one place. The input table says the same thing, and so does the listing’s own worked example:

```
{
  "usernames": ["gordonramsayofficial"],
  "until": "2025-01-01",
  "since": "2025-03-31",
  "maxItems": 500
}
```

The listing describes that run as returning posts published between January 1 and March 31. So `until` is the floor and `since` is the ceiling.

## Why it fails silently

A swapped pair does not produce an error. It produces a window with a negative width: everything newer than March 31 *and* older than January 1, which is nothing.

The run succeeds. The dataset is empty. Nothing in the output says the filter was the problem, and the obvious conclusion is that the account has been quiet, which is wrong.

## The check that takes ten seconds

Before you debug anything else, drop the date fields entirely and re-run with a small `maxItems`. If posts come back, the dates were the problem. If they do not, the problem is upstream: the profile may be private, deleted, or below the ten-post minimum the listing sets as a condition of use.

```
run_input = {"usernames": ["gordonramsayofficial"], "maxItems": 10}
# posts here but none with dates set  ->  the window was inverted
```

## The other empty-dataset cause

While you are here, the second most common way a TikTok profile run comes back looking empty is `maxItems`. It caps the entire run rather than each profile, so a batch of ten handles under a ceiling of 100 shares those hundred posts. The first handle looks complete and the rest look silent.

Multiply the ceiling by the length of your list, or leave it empty and let the run take everything.

## Worth writing once

Because the naming is counterintuitive, the safest thing is to never type these field names directly in application code. Wrap them:

```
def window(oldest=None, newest=None):
    """Reads in the normal direction; writes in the actor's."""
    out = {}
    if oldest: out["until"] = oldest   # yes, until is the older edge
    if newest: out["since"] = newest
    return out
```

One comment in one place beats remembering an inversion every time somebody touches the pipeline.

## The scrapers behind this

-   [TikTok Profile Scraper Creator profiles with full video history and engagement; 425 posts/sec $0.30 / 1K posts](/scrapers/tiktok-profile-scraper/)

## Questions people ask

### Which way round are since and until on TikTok Profile Scraper?

until is the older edge and since is the newer one. The listing's own worked example pairs until 2025-01-01 with since 2025-03-31 and describes the result as posts from January through March, so the naming is inverted against the usual convention but applied consistently.

### Why did my date-filtered TikTok run return zero posts?

Most often because the two fields are swapped, which asks for a window that closes before it opens. Check that as the first thing. If the pair is right, confirm the profile is public and has at least ten posts, which the listing requires.

### What date formats are accepted?

YYYY-MM-DD, such as 2025-01-15, or a full ISO 8601 timestamp such as 2025-01-15T10:30:00Z.

1.  [TikTok Profile Scraper, input parameters](https://apify.com/apidojo/tiktok-profile-scraper) apify.com

![apidojo](/blog/authors/apidojo.png)

## [Apidojo](/blog/authors/apidojo/)

15+ years of experience in data retrieval.

API Dojo is always ready for you. With 15+ years of experience, data acquisition has never been that easy. Cheapest prices with high availability.

-   🏯 15+ years of experience in data retrieval.
-   💰 Cheapest prices, qualified data.
-   ⚙️ High availability, extreme maintenance.
-   🐉 Hyper communicative, excellent support.

-   [apidojo.io](https://apidojo.io)

## More in this cluster

-   [TikTok scraping guides Pulling posts, comments, sounds and places from TikTok: which door each scraper goes in by, what a run costs, and what the output does not contain.](/blog/tiktok/)
-   [Why geotagged TikTok posts arrive without a geotag TikTok Location Scraper returns posts filed under a place, and not one field in the output names that place. Here is how to keep the provenance.](/blog/tiktok/tiktok-location-provenance/)
-   [Why your TikTok user run cost three queries getFollowers and getFollowing are both on by default, and each is its own charge on top of the profile lookup. An unconfigured run bills three times.](/blog/tiktok/tiktok-user-defaults/)
