Migration guide
Move every EasyCron job onto a runner you own
EasyCron is a hosted HTTP timer. This walkthrough moves those jobs onto NexusCron, a self-hosted runner you deploy with Docker Compose, then cancel the subscription.

If you already have a VPS or a home lab, the only thing EasyCron is doing is firing URLs you already own. Migration is inventory, compose up, recreate, then pause. The apps behind those URLs stay put.
For the product comparison, see the EasyCron alternative page. This page is the cutover.
EasyCron vs self-hosted runner
| Concern | EasyCron | NexusCron |
|---|---|---|
| Job store | Vendor account, CSV/API export if enabled | SQLite file on your disk, backed up with the rest of the box |
| HTTP ping | GET/POST from EasyCron IPs with optional headers | GET/POST from your runner. Same URL, headers, and timeout |
| Cron expression | 5-field crontab plus EasyCron extras | Standard 5-field crontab. Map extras to delay/retry fields |
| Secrets | Stored in EasyCron | Env file next to Compose. Never leaves the host |
| Failure handling | Email/webhook from the vendor | Local history plus your own alert job |
| Cost after year one | Still monthly | Zero. License is one payment |
1. Export the job list
From EasyCron, download CSV or pull the API. Keep name, cron, URL, HTTP method, timezone, and any auth headers. Map those four fields one-to-one.
# EasyCron CSV columns typically: name, cron, url, method, timezone
python3 - <<'PY'
import csv, json, sys
rows = list(csv.DictReader(open("easycron-export.csv")))
jobs = [{
"name": r["name"],
"cron": r["cron"],
"url": r["url"],
"method": r.get("method") or "GET",
} for r in rows]
json.dump(jobs, sys.stdout, indent=2)
PY2. Docker Compose on the box that already stays up
Put the runner next to the app it pings when you can. Persist /data so history survives restarts. Match TZ to EasyCron.
services:
nexuscron:
image: nexuscron:latest
restart: unless-stopped
ports:
- "127.0.0.1:8787:8787"
environment:
TZ: Europe/Madrid
NEXUSCRON_DATA: /data
NEXUS_TELEMETRY: "off"
volumes:
- ./data:/data
- ./nexuscron.env:/run/secrets/env:roThen docker compose up -d. Open port 8787 only on localhost or your private network.
3. Recreate each HTTP job
Same URL, same cron string, headers from your env file. Do not paste tokens into the CSV.
curl -sS -X POST http://127.0.0.1:8787/api/jobs \
-H "content-type: application/json" \
-d '{
"name": "invoice-reminders",
"cron": "0 8 * * 1-5",
"method": "POST",
"url": "https://billing.internal/jobs/remind",
"headers": { "Authorization": "Bearer $JOB_TOKEN" },
"timeout_ms": 15000
}'4. Cut over without a missed ping
- Watch one full interval in NexusCron run history.
- Pause the matching EasyCron job, do not delete it yet.
- Leave EasyCron paused for a week of clean local history.
- Cancel the EasyCron plan after that week.
Full Platform Bundle
Own the runner and the rest of the stack
$249.99lifetime, Webhook Router, NexusCron, NexusPipeline, NexusAdmin
- Self-hosted cron runner (NexusCron)
- Webhook Router for inbound events
- NexusPipeline and NexusAdmin
- Docker Compose on machines you already pay for
Checkout stays on Whop. You get the source after payment.
Questions people ask before they switch
Do I have to change the URLs my apps already expose?
No. Recreate each EasyCron job with the same HTTPS endpoint. The app that receives the ping does not need a new route.
How do I avoid double-firing during cutover?
Pause EasyCron jobs after the first successful NexusCron run for that schedule, not before. Overlap of one interval is safer than a missed ping.
What about EasyCron’s time zone field?
Set TZ in docker-compose.yml (for example Europe/Madrid) so expressions mean the same hour they meant in EasyCron.
Can I keep EasyCron as a watchdog for a week?
Yes. Point a low-frequency EasyCron job at a health URL on NexusCron, then cancel EasyCron when the runner has a clean week of history.
Keep reading
Guide
Self-hosted cron alternative
Stop paying a monthly bill to fire HTTP on a timer. NexusCron is a self-hosted cron alternative you deploy with Docker on machines you already own.
Guide
EasyCron and cron-job.org alternative
Compare EasyCron, cron-job.org, and other hosted cron products with NexusCron. Same job, no subscription, logs and secrets stay on your disk.
Guide
Migrate cron jobs off cloud providers to self-hosted
Technical guide for migrating cron jobs off cloud providers to self-hosted NexusCron. Architecture, Docker Compose, job mapping, and cutover without missed pings.
Guide
Replace cloud cron services with self-hosted NexusCron
Architecture, Docker Compose, production env vars, and cutover for replacing hosted cron with NexusCron on a VPS you already run. One lifetime payment.
Guide
Migrate EasyCron jobs to self-hosted NexusCron
Architecture, Docker Compose, and cost math for replacing $20–$50/month hosted cron with NexusCron on a VPS you already run. One lifetime payment.
Guide
Self-hosted webhook router
A self-hosted webhook router that receives, transforms, and forwards events on your infrastructure. One payment. No Zapier tax for simple routing.
Guide
Replace cloud webhook services with self-hosted Webhook Router
Architecture, Docker Compose, and config mapping to replace Hookdeck, Svix, Zapier, and Make with NexusCore Webhook Router on your VPS. One lifetime payment.
Guide
Replace cloud webhook queues with local SQLite routing
Technical architecture for replacing cloud webhook queues with local SQLite routing. Production Docker Compose, under 50MB RAM, WAL mode, retries, and dead-letter replay.
Guide
Self-hosted pipeline setup
NexusPipeline is a FastAPI Docker execution engine. Clone it, compose up, and keep job state on disk you control. One payment. No worker SaaS.
Guide
Self-hosted admin dashboard setup
NexusAdmin is the self-hosted dashboard that sits next to NexusPipeline. One payment, Docker Compose, no SaaS admin tenant.
Guide
Self-hosted log stream setup
LogStream is a single-binary Node.js collector. HTTP and UDP ingest, SQLite, live dashboard, webhook alerts. One payment. No observability SaaS.
Guide
Self-hosted env sync setup
EnvSync Agent syncs .env values across VPS hosts, laptops, and microservices. Encrypted key-value store. One payment. No secrets tenant.
Guide
Self-hosted API proxy setup
API Proxy Service sits between your code and upstream APIs. Retries, rate limits, fallbacks, circuit breakers. One payment. No gateway SaaS.