Free tool · runs in your browser
Bookmark sync cost calculator
Since February 2026 X's API has been pay-per-use, and reads are billed per resource returned rather than per request. That one sentence decides what a bookmarks product costs to run. This calculator applies the published rates to your numbers and shows every line of the arithmetic, so you can check it rather than trust it.
- Post read $0.005
- User read $0.010
- 24-hour UTC deduplication
- Rates verified 2026-09-07
Estimate the cost
Change any input and the arithmetic below updates. Results are announced in an aria-live region.
The account's saved-post history.
Average, going forward. 0 means dormant.
One-time import
$5.00
1,000 post reads, paid once, before this user has paid you anything.
Ongoing, per month
$0.90
180 post reads across 30 UTC days.
Cost per user per month
$1.32
Ongoing $0.90 plus the import amortised over 12 months ($0.42).
One-time import — show the arithmetic
| What | Arithmetic | Cost |
|---|---|---|
| Bookmark posts | 1,000 posts × $0.005 | $5.000 |
| Total | $5.000 | |
Post reads bill at $0.005 per resource returned, so importing N bookmarks costs N × $0.005 with no volume discount and no way to batch it cheaper. With author profiles off, this is pure arithmetic on a published rate — there is no estimate in it at all.
Ongoing sync — show the arithmetic
| What | Arithmetic | Cost |
|---|---|---|
| Daily probe | 30 UTC days × 1 post (max_results=1) × $0.005 | $0.150 |
| Page walk on active days | 30 active days × 5 posts (pages of 5 to find 3) × $0.005 | $0.750 |
| Total | $0.900 | |
- 90 new bookmarks a month = 30 active days × 3.
- Pages of 5 retrieve 5 posts to find 3 — 2 billed posts a day are overlap the walk has to read to know it is done. That waste is bounded by page size and does not grow with volume.
- A second sync on the same UTC day is nearly free: the posts already read are deduplicated inside the 24-hour window, so only genuinely new posts are billed.
Rates: post read $0.005 per resource returned, user read $0.010. Behaviour: resource deduplication within a 24-hour UTC window. Both verified against X's published pricing on 2026-09-07 and both described by X as subject to change.
The three rates and two behaviours that decide the answer
- Posts: Read
- $0.005 per post resource returned
- User: Read
- $0.010 per user resource returned — twice a post
- Owned Read
- $0.001, but only when the authenticated user is the owner of the developer app. For a multi-tenant product the authenticated user is a customer, so this rate does not apply.
- Deduplication
- A resource charged once is not charged again within the same 24-hour UTC day window. X describes this as a soft guarantee.
- Monthly cap
- 3,000,000 post reads per billing cycle, above which Enterprise is required
Billing is per resource, so page size is the cost unit
This is the part that surprises people. A request is free; the resources it returns are not. Asking for max_results=100 to discover five new bookmarks returns 100 posts and bills 100 post reads — $0.50 instead of $0.05. Because paginating is free inside the per-user rate limit (180 requests per 15 minutes on the bookmarks endpoint), a smaller page is strictly cheaper, and the only thing a larger page buys is waste.
For a walk that stops at the first post it already has, the waste is p − (k mod p) for page size p and k new bookmarks — bounded by page size and independent of k. That is why the sizing this calculator models holds pages at five for the first twelve pages and then doubles: minimum waste in the common case, bounded request count when catching up.
Deduplication is why sync frequency matters more than sync size
Because a resource is billed once per 24-hour UTC window, re-reading the same bookmarks twice in one day is free and re-reading them tomorrow is not. Two consequences fall out of that. Polling hourly multiplies cost by the number of polls and discovers nothing extra, so a scheduled sync should run once per UTC day. And a user-triggered "sync now" later the same day is nearly free, because the overlap has already been paid for — which means manual sync can be offered generously rather than rationed.
Read the detail on what a post read is and on how the 24-hour window works.
The $0.005 probe
The bookmarks endpoint returns newest-first, so max_results=1 returns the single most recent bookmark for one post read. If its ID matches the one already stored, there is nothing new and the sync stops there. A dormant user therefore costs $0.005 a day — about $0.15 a month — instead of the $0.50 a day a naive full page would cost. That single decision is a hundred-fold difference on an idle account, and it is why the ongoing number in this calculator is so much smaller than the intuitive one.
What is arithmetic here, and what is an estimate
With author profiles switched off, every figure on this page is arithmetic on a published rate: resources counted, multiplied by $0.005. Switch author profiles on and one modelled number enters — the share of a bookmark library that resolves to a distinct account, which falls as the library grows because people re-bookmark the same people. That share is fitted to measured figures (about 70% distinct at 100 bookmarks, about 22% at 5,000) and is labelled as an estimate wherever it is used. The amortisation of the one-time import into a per-user-per-month figure assumes a twelve-month customer lifetime, which is an assumption about your business, not about X.
The uncomfortable conclusion
The ongoing cost of a bookmarks product is small and predictable. The import is neither: it is a spike, paid in full before the customer has paid anything. A single signup from someone with 5,000 saved bookmarks costs about $25 before any revenue exists. This is why Sift's free plan imports the newest 100 bookmarks and no more, and why paid history is backfilled in weekly slices rather than all at once. Not a limitation we are hiding — the number above is the reason.
X describes its prices and caps as subject to change, and the Owned Read interpretation above is one we would want confirmed by X support before betting on it. If it were ever read per-authenticated-user rather than per-app-owner, unit cost would drop five-fold. We plan at $0.005 and treat anything better as upside.
Nothing you paste or open is uploaded.
The calculator makes no API call — to X or to us. It is arithmetic in your browser over numbers you typed, which is also why it cannot tell you how many bookmarks you actually have. You can confirm it: open your browser's network panel and use the tool. The only requests you will see are for this page's own code and for pages you might click to next — none of them carries what you typed.
Other free tools
- X post character counterCounts a post the way X does — links are 23 characters, emoji and CJK count double.
- Thread splitterPaste long text and get a numbered thread split on sentence boundaries, never mid-word.
- Bookmark export converterConvert a CSV or JSON bookmark export to Markdown, CSV or JSON. In-browser, no upload.
- X archive explorerOpen your official X data archive and search your posts and likes locally. Nothing leaves the tab.
Built by the people who sort your bookmarks for you
Sift imports your X bookmarks, sorts them into categories and emails you a digest. The free plan imports your newest 100 bookmarks — a cap, not a trial, because reading them costs real money.