A search card connects to a calendar band and source post cards.
Keep the executed date rule with the result.

X Search public build 0.1.30 accepts queries (1 to 20), searchMode (latest, top, photos, videos), maxItemsPerQuery (1 to 1000), and optional startTime and endTime date strings. Replace the whole saved two-query list with one intended query and date window, using maxItemsPerQuery 2 and searchMode latest for your first bounded check. Use native startTime and endTime once without duplicate inline since or until filters, and without invented expansion, includeReplies, or page inputs.

The current control input uses from:OpenAI with startTime 2026-07-07 and endTime 2026-07-09, which generated the executed query from:OpenAI since:2026-07-07 until:2026-07-10. Two July 9 reply rows had correct author IDs and UTC createdAt values at positions 2 and 3, along with one aggregate outsideTimeRange exclusion and no excluded IDs. This proves the checked workflow, not every operator or full historical coverage.

The native fields used by the tool include inputQuery, executedQuery, searchMode, resultPosition, postId, postUrl, text, createdAt, authorId, authorHandle, authorUrl, isReply, isQuote, isRepost, and observedAt. Output searchMode uses capitalized Latest while input enum is lower-case, and there is no dataset row status field.

Action steps for date-scoped searches

  1. Write your intended phrase and date window before running any script. Keep maxItemsPerQuery low and searchMode set to latest for a pilot check.
  2. Replace the sample query list with one single query string, a maximum item cap of two, and native startTime and endTime strings. Do not add duplicate inline since or until terms inside your query string.
  3. Save both inputQuery and executedQuery strings. For example, a request ending on July 9 generates an exclusive upper boundary of July 10, such as until:2026-07-10.
  4. Parse native createdAt timestamps and check them against a stated UTC interval. Date-only labels on screens do not create local time zones unless you convert them.
  5. Keep missing timestamps marked as unresolved rather than guessing. An empty createdAt field cannot be sorted by observedAt, which only records collection time.
  6. Check author IDs, handles, and post types like replies, quotes, or reposts. A post from an author can still be a reply rather than an original standalone post.
  7. Inspect OUTPUT top-level fields like searchesQueued, searchesStarted, rowsSaved, outsideTimeRange, statusCounts, and stopReason, along with the queries array containing inputQuery, executedQuery, status, rowsSaved, outsideTimeRange, and stopReason. Top-level queries_exhausted means queued processing ended, not that all matching source posts were exhausted, while per-query max_items_per_query means the sample reached its query cap. Failed, empty, and capped outcomes stay separate, and you must preserve source position gaps rather than rerank collected rows.
  8. Deliver your dated ledger with input receipts and exclusion counts. Do not assume a small sample represents total platform frequency or historic popularity.

Original-fiction UTC boundary check example

The following table is an original-fiction fixture to test UTC date boundaries for an October 1 to October 4 interval. UTC is Coordinated Universal Time, and a half-open interval includes its start time but excludes its upper boundary. A requested inclusive October 1 to 3 date window corresponds to a start of October 1 at 00:00 UTC and an exclusive upper boundary of October 4 at 00:00 UTC under the checked date-only convention. Native requested endTime October 3 versus generated until October 4 remain separate. This is a reader check fixture and not live data from the Actor control.

Original-fiction UTC boundary check example
Post IDCreated At (UTC)Observed AtStatus in Window
CandidateP12026-10-01 00:00:002026-10-01 01:00:00Inside
CandidateP22026-10-03 23:59:592026-10-04 00:00:00Inside
CandidateP32026-10-04 00:00:002026-10-04 01:00:00Outside
CandidateP4null2026-10-03 12:00:00Unresolved

This fixture shows two inside rows, one outside row, and one unresolved row with a null creation date. A collected sample can miss earlier posts, so a missing post means it was not seen in the sample, not that it is absent from X.

Sources & further reading

By Chronometrica · Updated

Back to top ↑