When you cannot watch everything quickly: popular 128 of 427 sets run fast, and the fastest lane yields to the budget

日本語版

Development log of the Toreca Dash app / September 2026

My app Toreca Dash searches shopping sites by set (a release unit of products) to collect first-come and pre-order information. There are 427 sets in all. I would like to watch them all quickly, but there are limits on scraping cost and on calls to external services.

On the night of 7 September 2026 I decided on a policy, “watch only the popular ones quickly”, and built it. This is a record of what I sped up, what I gave up, and how I protected cost.

Numbers come from my work log of 7 September 2026.

Policy: three popular genres, latest and last two years only

The policy: “for Pokémon cards, ONE PIECE cards and Dragon Ball, the latest sets and the last two years of sets are enough”. Three genres × the last 24 months is 128 sets, about 30% of all 427.

The original per-set search walked all 427 sets in order, and one lap took different times per site.

One lap over 427 setsPopular lane, 128 sets
Amazon4 hoursevery 30 minutes (about 450 s per run)
Rakuten Books24 hours22 sets every 10 minutes, one lap per hour
Rakuten Ichiba24 hours22 sets every 10 minutes, one lap per hour
Yahoo!8 hours128 sets every 2 hours

The popular lane runs on a separate cursor from the normal lane. Sharing one would disturb the normal lane’s progress.

Two sites (Amiami and AEON Style) have no concept of a popular lane. They do not search by set but read a list page whole, all at once. There is nothing to narrow; going faster means shortening the interval, which is a cost question.

Batching them stopped another monitor

I caused a regression with Rakuten right after adding this, and fixed it on the spot. At first I ran Rakuten as “128 sets in one go every hour”. But Rakuten’s API allows one call per 1.5 seconds shared by all jobs, and the instant sell-out monitor alone uses 30 calls a minute, 75% of the allowance all the time. A batch took over 13 minutes, and meanwhile even the sell-out monitor was skipped as “previous run still going”.

The same 128 sets per hour, scattered as 22 sets every 10 minutes, makes no pile-up. I also offset the minutes (Rakuten Books lane at :03, :13…, Ichiba lane at :08, :18…). Right afterwards: the sell-out monitor ran 8 times in 9 minutes with 0 skips, average 44.9 s, no worse.

Fastest lane: popular items truly once a minute

There was also a request: “I want popular items checked every minute.” That made the third time that day I confirmed what I wrote about before: “runs every minute” is not “checks each item every minute”.

I cannot hit all 28 sets every minute. At 40,320 requests a day, the month would be 1.96 million, above the 1.25 million contract. At 10 sets a minute it is 14,400 a day. In exchange I moved Amazon’s popular lane (128 sets) from 30 to 60 minutes.

Amazon laneTargetCycle
Fastest28 sets before / just after releaseabout 2.8 min
Popular128 sets, three genres1 hour
NormalAll 427 sets4 hours

What I cannot do, I say I cannot

The fastest lane yields when it exceeds the budget pace

Amazon is a priority host that passes the scraping service’s daily throttling unconditionally, because it is the lifeline of the first-come race. That is right in itself, but if the every-minute fastest lane also passes unconditionally, Amazon eats the whole allowance and every other site is throttled.

Rather than fix a count on the safe side, it is more reliable to look at actual consumption and stop automatically. I added a check (isScrapeDoOverPace()) that skips the run if the time-proportional budget pace is exceeded.

Measured over a 2-minute window: 55 requests, 55 credits, 27.5 credits a minute (about 39,600 a day). The allowance was 1,147,389 remaining and 23 days to reset, 47,392 a day. One trap about window length: measured over 10 minutes it looked like 47.5 credits a minute (68,400 a day). A costly job every 3 hours (25 credits each) happened to fall in that window. Extrapolating from a short window is wrong; check the next day’s daily total.

What I learned

When you cannot speed up everything, decide what to speed up and what to slow down in return.

This is the English version of the original Japanese article.

More in English