Scheduled jobs and billing logic · Build
Renewals and reminders that run without anyone remembering
Subscription and listings businesses get scheduled jobs that treat every account by the same rules. A US marketplace ran six of them every day.
EngagementHourly · remote
Hours9–18 CET · 4 h overlap
StackNode.js · AWS Lambda · SQS
Proof2 case studies
The service in 4 parts
01 · Who it’s for
A subscription or listings business where revenue comes in on a renewal date that is different for each customer, and where thousands of expiry dates are too many for anyone to watch by hand.
02 · What we’ve built
- Six daily jobs on a US marketplace for truck services. They sent reminders before expiry, downgraded listings after non-payment, processed recurring charges, followed up on unverified listings, ran a re-engagement campaign and warned fleet operators about upcoming vehicle inspections.Case study 07 →
- When a listing is more than seven days late, the renewal job downgrades it, updates the invoice and re-indexes the record. Search shows the change immediately, so the advertiser doesn’t keep a placement they stopped paying for.Case study 07 →
- Over-the-network updates for payment terminals that retried every five minutes until they succeeded, while the terminal kept working normally.Case study 12 →
03 · How we work
01 · SAME STEPS FOR EACH JOBEach job queries the database, takes a template, writes a record and puts a message on a queue. A single service does all of the sending.
02 · A REPORT ON THE BUSINESSA job that moves money should report what it did, such as how many listings were downgraded this week. The marketplace jobs reported only their errors, so nobody could see whether the re-engagement campaign changed anything.
04 · Stack
Node.jsAWS LambdaSQSMySQLHandlebarsobject storage for templates
Proof
Where we’ve done this before
Case study 07 · Marketplace6 jobsSix daily jobs on a US marketplace for truck services. They sent reminders before expiry, downgraded listings after non-payment, processed recurring charges, followed up on unverified listings, ran a re-engagement campaign and warned fleet operators about upcoming vehicle inspections.Read the case study →Case study 12 · Identity100+ terminalsOver-the-network updates for payment terminals that retried every five minutes until they succeeded, while the terminal kept working normally.Read the case study →
FAQ
Questions about this service
By hand, the policy reaches some accounts and misses others, which is worse than not having it at all. In code every account is treated the same way, and nobody has to decide to apply it.
Outside production, the single sending service redirects all mail to a test address, so staging has no route to a real customer’s inbox.
We choose per job. Someone who stopped halfway through creating a listing gets the reminder in the app, at the point where they left off.
When the data shows that an owner has stopped paying attention. For the marketplace’s annual listings that meant a three-step campaign at roughly 179, 182 and 186 days after a listing’s last update, about half a year before renewal.
Next step
Describe the problem and we’ll come back with three options.
The first call takes 30 minutes, and you’re under no obligation.