Deploy Scheduled Jobs

Write a script. Set a schedule. We run it automatically. No cron syntax to memorize.

Perfect For

Database Backups

Run backups every night without thinking about it

Email Campaigns

Send newsletters and digest emails on schedule

Cleanup Tasks

Remove old data, expire sessions, prune logs automatically

Report Generation

Generate and send reports daily, weekly, or monthly

How It Works

  1. 1

    Write your script

    Just a normal Node.js, Python, or Go script. No special setup.

  2. 2

    Push to Tokay

    git push tokay we handle the rest.

  3. 3

    Set the schedule

    Pick when to run it from the dashboard. "Every day at 2am" is one click.

  4. 4

    It runs automatically

    We run your job on schedule and send you logs. That's it.

Scheduling Made Simple

Set your schedule in plain English from the dashboard. No cron syntax to remember.

Every day at 2:00 AM

Perfect for nightly backups and data processing

Every 15 minutes

Keep data fresh with frequent updates

Every Monday at 9:00 AM

Send weekly reports and summaries

First day of every month

Generate monthly reports and invoices

Just Write Your Script

Focus on your business logic. We handle the scheduling infrastructure.

Node.js Backup Job

// backup.js - Run this daily at 2am from the dashboard
const { Client } = require('pg');
const AWS = require('aws-sdk');

async function run() {
  console.log('Starting backup...');

  const db = new Client({ connectionString: process.env.DATABASE_URL });
  await db.connect();

  const data = await db.query('SELECT * FROM users');
  const backup = JSON.stringify(data.rows);

  const s3 = new AWS.S3();
  await s3.putObject({
    Bucket: 'my-backups',
    Key: `backup-${new Date().toISOString()}.json`,
    Body: backup
  }).promise();

  console.log('Backup complete!');
  await db.end();
}

run().catch(console.error);

Python Email Digest

# digest.py - Schedule this for Monday mornings
import smtplib
from email.mime.text import MIMEText

def send_digest():
    print("Sending weekly digest...")

    msg = MIMEText("""
    Your weekly summary:
    - 42 new signups
    - 128 orders
    - $12,450 revenue
    """)

    msg['Subject'] = 'Weekly Digest'
    msg['From'] = 'digest@yourdomain.com'
    msg['To'] = 'team@yourdomain.com'

    smtp = smtplib.SMTP(os.environ['SMTP_HOST'])
    smtp.send_message(msg)

    print("Digest sent!")

if __name__ == '__main__':
    send_digest()

Go Cleanup Task

// cleanup.go - Run this nightly
package main

import (
    "database/sql"
    "log"
    "time"
)

func main() {
    log.Println("Starting cleanup...")

    db, _ := sql.Open("postgres", os.Getenv("DATABASE_URL"))
    defer db.Close()

    // Delete old sessions
    cutoff := time.Now().AddDate(0, 0, -30)
    result, _ := db.Exec(
        "DELETE FROM sessions WHERE created_at < $1",
        cutoff,
    )

    rows, _ := result.RowsAffected()
    log.Printf("Cleaned up %d sessions", rows)
}

That's it. Push your script, set the schedule in the UI, and forget about it.

What We Handle For You

Reliable Scheduling

Your jobs run on the schedule you set. Predictable timing, no drift.

Error Handling

If a job fails, we log it and alert you. You see exactly what went wrong.

Complete Logs

Every job run is logged. See exactly what happened and when.

Timezone Aware

Set your timezone once. Jobs run when you expect them to, no matter where you are.

Stop babysitting cron.

Set the schedule. We run the jobs. Logs are there when something breaks.