Mirror first, filter later
On every sweep the worker asks the official Upwork GraphQL API for the newest postings with no search criteria and stores each one in Postgres, full API payload included. Results come newest first, so a sweep stops at the first page with nothing new, and a caught-up sweep costs a single request. Filters are plain functions over the stored rows and never call the API.


