What runs and when?
Every schedule is a cron expression evaluated in UTC. The defaults below come fromapps/api/.env.example.
Batched alerts do not have their own schedule. They send once the daily pipeline reports every child job settled, so the delivery time depends on workload and retries rather than on a fixed clock.
What are the two workers?
The difference matters. The Apple limiter spaces requests, while the Google Play limiter spaces job starts, because one Google Play job fans out into many sequential requests of its own.
Why are the limits conservative?
The iTunes endpoints informally tolerate roughly 20 requests per minute per IP address. Google Play is more sensitive still. Neither store publishes a limit or an error you can negotiate with, so asobeast stays well underneath by default. RaisingSCRAPE_ITUNES_RPM or SCRAPE_GPLAY_RPM puts the host IP address at risk of being throttled or blocked by the store, which stops collection for every app on that host. Do not point several instances at the stores from one IP address.
How do you estimate your daily budget?
Daily request volume is roughly tracked keywords multiplied by tracked markets, plus per app work for snapshots, reviews and category ranks.GET /jobs/budget returns an estimate broken down by kind, and the settings page renders it as a budget card with a utilization meter. The dashboard warns when the daily pipeline would exceed 85 percent of capacity.
Category charts are the smallest slice of the daily budget, but they count, because every app is scheduled against the grossing chart as well as its own free or paid chart.
Can you call the store outside the queue?
No, with one exception. All collection goes through the queue so the limiters apply. The single exception is a small, user initiated suggestion lookup, which is bounded by a person clicking rather than by a schedule.What is retained?
The retention job prunes each table on its own window.0 means keep forever. Every variable is described in the configuration reference.
Two exceptions are worth remembering. The newest snapshot per app is always kept regardless of age, and open or snoozed action items are never pruned by age.
What happens when a job fails?
A parse failure fails the job. BullMQ retries it with backoff, and request handling is never affected, so a broken parser degrades collection rather than taking the instance down. Failed jobs are visible on the queue dashboard at/admin/queues, which answers only to the owner account. See Troubleshooting.