Skip to content

Scheduling Basics

Scheduling is at the heart of automation in Querri. Whether you’re refreshing dashboards, sending reports, or executing recurring analysis, understanding how to set up schedules properly is essential. This guide will teach you everything you need to know.

A schedule defines when and how often an automated task should run. In Querri, you can create schedules for:

  • Dashboard refreshes
  • Email report delivery
  • Data exports
  • Step execution in projects
  • Data source synchronization

Querri provides both simple frequency options and advanced cron expressions.

For common scheduling needs, use the simple frequency picker:

Hourly:

Runs: Every hour
Example: On the hour, every hour (1:00, 2:00, 3:00...)
Best for: Real-time dashboards, operational monitoring

Daily:

Runs: Once per day at a specified time
Example: Every day at 8:00 AM
Best for: Morning reports, daily summaries

Weekly:

Runs: Once per week on specified day(s)
Example: Every Monday at 9:00 AM
Best for: Weekly team meetings, progress reports

Monthly:

Runs: Once per month on a specified day
Example: 1st of each month at 10:00 AM
Best for: Monthly business reviews, invoicing

Custom:

Runs: Based on a cron expression
Example: Multiple times per day, specific days, complex patterns
Best for: Advanced scheduling needs

Consider these factors:

Data Update Frequency:

  • If your data updates hourly, don’t schedule more frequently than hourly
  • If your data updates daily, daily or weekly schedules are appropriate

Audience Needs:

  • Executives: Daily or weekly summaries
  • Operations teams: Hourly or real-time updates
  • Analysts: On-demand or daily refreshes

Resource Constraints:

  • More frequent schedules use more resources
  • Consider database query limits
  • Balance timeliness with cost

For advanced scheduling, Querri uses cron expressions. A cron expression is a string that represents a schedule.

* * * * *
│ │ │ │ │
│ │ │ │ └─── Day of week (0-7, where 0 and 7 are Sunday)
│ │ │ └───── Month (1-12)
│ │ └─────── Day of month (1-31)
│ └───────── Hour (0-23)
└─────────── Minute (0-59)

Asterisk (*): Matches any value

* * * * * = Every minute of every day

Comma (,): Specifies multiple values

0 9,12,17 * * * = At 9:00 AM, 12:00 PM, and 5:00 PM every day

Hyphen (-): Specifies a range

0 9-17 * * * = Every hour from 9:00 AM to 5:00 PM

Slash (/): Specifies increments

*/15 * * * * = Every 15 minutes
0 */4 * * * = Every 4 hours (at 0:00, 4:00, 8:00, 12:00, 16:00, 20:00)

Question mark (?): Used in day fields when the other day field is specified

0 9 ? * MON = Every Monday at 9:00 AM

Every minute:

* * * * *

Every hour at minute 0:

0 * * * *
Example: 1:00, 2:00, 3:00...

Every day at 8:00 AM:

0 8 * * *

Every Monday at 9:00 AM:

0 9 * * 1

Every weekday at 6:00 AM:

0 6 * * 1-5

Every 15 minutes:

*/15 * * * *
Example: :00, :15, :30, :45

Twice a day (9 AM and 5 PM):

0 9,17 * * *

First day of every month at 10:00 AM:

0 10 1 * *

Last day of every month (requires special handling):

0 10 28-31 * *
Note: Will run on days 28-31, check in logic if it's actually the last day

Every 6 hours:

0 */6 * * *
Example: Midnight, 6 AM, 12 PM, 6 PM

Business hours: Every hour from 9 AM to 5 PM on weekdays:

0 9-17 * * 1-5

Start of every quarter (Jan 1, Apr 1, Jul 1, Oct 1) at midnight:

0 0 1 1,4,7,10 *

For readability, you can use names instead of numbers:

Months:

JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC
Example:
0 9 1 JAN,APR,JUL,OCT *
Every quarter on the 1st at 9:00 AM

Days of week:

SUN, MON, TUE, WED, THU, FRI, SAT
Example:
0 9 * * MON-FRI
Every weekday at 9:00 AM

Before activating a schedule, test your cron expression:

  1. Use the Querri cron tester: Built into the scheduling interface
  2. Check next run times: See the next 5 scheduled executions
  3. Verify the pattern: Ensure it matches your intent

Example:

Expression: 0 9 * * MON
Next runs:
• Monday, January 22, 2024 at 9:00 AM
• Monday, January 29, 2024 at 9:00 AM
• Monday, February 5, 2024 at 9:00 AM
• Monday, February 12, 2024 at 9:00 AM
• Monday, February 19, 2024 at 9:00 AM

Timezones are critical for ensuring schedules run at the correct local time.

When creating a schedule:

  1. Select timezone: Choose from a list of standard timezones
  2. Consider your audience: Use the timezone where most users are located
  3. Use UTC for global teams: Avoids confusion across timezones

US Timezones:

America/New_York (Eastern Time)
America/Chicago (Central Time)
America/Denver (Mountain Time)
America/Los_Angeles (Pacific Time)

European Timezones:

Europe/London (GMT/BST)
Europe/Paris (Central European Time)
Europe/Berlin (Central European Time)

Asia Pacific Timezones:

Asia/Tokyo (Japan Standard Time)
Asia/Singapore (Singapore Time)
Australia/Sydney (Australian Eastern Time)

UTC:

UTC (Coordinated Universal Time)
Best for: Global teams, avoiding DST issues

Querri automatically handles daylight saving time transitions:

Example:

Schedule: Every day at 9:00 AM America/New_York
• Winter: Runs at 9:00 AM EST (UTC-5)
• Summer: Runs at 9:00 AM EDT (UTC-4)
• The schedule automatically adjusts on DST transition dates

Best practices:

  • Use named timezones (e.g., “America/New_York”) instead of offsets (e.g., “UTC-5”)
  • Named timezones automatically handle DST
  • Document which timezone you’re using for each schedule

For global audiences, create separate schedules:

Morning Report - Americas:
Schedule: 0 8 * * 1-5
Timezone: America/New_York
Recipients: US team
Morning Report - Europe:
Schedule: 0 8 * * 1-5
Timezone: Europe/London
Recipients: EU team
Morning Report - Asia Pacific:
Schedule: 0 8 * * 1-5
Timezone: Asia/Singapore
Recipients: APAC team

1. Navigate to automation settings:

  • Go to your dashboard or project
  • Click on “Automation” or “Schedules”

2. Create a new schedule:

  • Click “New Schedule”
  • Give it a descriptive name

3. Choose frequency:

  • Select simple frequency option, or
  • Enter a custom cron expression

4. Set timezone:

  • Choose the appropriate timezone
  • Preview next run times

5. Configure additional options:

  • Set start date (when schedule becomes active)
  • Set end date (optional, when schedule should stop)
  • Enable/disable the schedule

6. Test the schedule:

  • Review next execution times
  • Verify the pattern matches your needs

7. Activate:

  • Save and enable the schedule

Use clear, descriptive names:

Good names:

Daily Sales Report - 8AM EST
Weekly Team Dashboard Refresh - Monday 9AM
Hourly Operations Monitoring
Monthly Executive Summary - 1st at 10AM

Poor names:

Schedule 1
Dashboard Refresh
Report
Automation

Include:

  • What: What is being automated
  • When: Frequency and time
  • Who: Target audience (if relevant)

Every 15 minutes during business hours on weekdays:

*/15 9-17 * * 1-5
Runs: :00, :15, :30, :45 past each hour from 9 AM to 5 PM, Monday-Friday

First and last day of each month:

Two schedules needed:
1. 0 9 1 * * (First day)
2. 0 9 28-31 * * (Last day, with logic to check if it's actually the last day)

Quarterly reports on 15th of Jan, Apr, Jul, Oct:

0 10 15 1,4,7,10 *

Different times for different days:

Requires multiple schedules:
1. 0 8 * * 1-4 (Mon-Thu at 8 AM)
2. 0 9 * * 5 (Fri at 9 AM)

Mistake 1: Too frequent:

Wrong: * * * * * (every minute)
Better: */5 * * * * (every 5 minutes) or less frequent

Mistake 2: Invalid day combinations:

Wrong: 0 9 31 2 * (Feb 31st doesn't exist)
Better: 0 9 28 2 * (Feb 28th) or use end-of-month logic

Mistake 3: Forgetting timezones:

Wrong: Creating schedule without specifying timezone
Better: Always explicitly set the timezone

Mistake 4: Off-by-one errors:

Wrong: 0 9 0 * * (Day 0 doesn't exist)
Better: 0 9 1 * * (Day 1 is the first of the month)

View your active schedules:

  • Next run time: When the schedule will execute next
  • Last run time: When it last executed
  • Last run status: Success or failure
  • Enabled/Disabled: Whether the schedule is active

You can modify schedules at any time:

  • Change frequency: Update the cron expression
  • Change timezone: Adjust for different audience
  • Update settings: Modify what happens when schedule runs
  • Pause schedule: Temporarily disable without deleting

Remove schedules you no longer need:

  1. Find the schedule in the list
  2. Click “Delete” or “Remove”
  3. Confirm the deletion
  4. Past execution history is preserved

Check these items:

  1. Is the schedule enabled?
  2. Is the start date in the past?
  3. Has the end date passed?
  4. Is the cron expression valid?
  5. Are there any execution errors?

Verify:

  1. Timezone is set correctly
  2. Cron expression matches your intent
  3. Daylight saving time isn’t causing confusion
  4. System clock is accurate

If schedules are slow:

  1. Check if multiple schedules run simultaneously
  2. Optimize queries in the scheduled task
  3. Stagger schedules to distribute load
  4. Consider caching for frequently accessed data
  1. Start with simple frequencies: Use hourly, daily, weekly unless you need custom patterns
  2. Test before activating: Always preview next run times
  3. Document your schedules: Include why each schedule exists
  4. Monitor execution: Regularly check that schedules are running successfully
  5. Clean up old schedules: Remove schedules that are no longer needed
  6. Use descriptive names: Make it easy to understand what each schedule does
  7. Consider costs: More frequent schedules consume more resources
  8. Set end dates for temporary schedules: Prevent them from running indefinitely
Every hour: 0 * * * *
Every day at 8 AM: 0 8 * * *
Every Monday at 9 AM: 0 9 * * 1
Every weekday at 6AM: 0 6 * * 1-5
Every 15 minutes: */15 * * * *
Twice daily: 0 9,17 * * *
First of month: 0 10 1 * *
Every 6 hours: 0 */6 * * *
Business hours: 0 9-17 * * 1-5
Start of quarter: 0 0 1 1,4,7,10 *

Master scheduling to unlock the full power of automation in Querri!