---
title: 'How to Set Up Recurring Tasks and Reminders in Airtable'
description: 'Build a recurring task system in Airtable — repeating tasks via automations, deadline reminders, conditional alerts, and full task tracking without external tools.'
canonical_url: 'https://www.business-automated.com/tutorials/airtable-recurring-tasks-reminders'
md_url: 'https://www.business-automated.com/tutorials/airtable-recurring-tasks-reminders.md'
last_updated: 2026-08-19
---

Airtable doesn't ship recurring tasks. Every team running on Airtable for ops eventually hits this gap and either pays for a third-party tool or builds it themselves. Building it is usually the right call — what you end up with is more flexible than most task-app implementations and integrates with everything else in your base.

This guide walks through the full recurring-task system: schema, daily-check automation, custom intervals, deadline reminders, escalation alerts, and the patterns that keep it maintainable.

## The Recurring Task Architecture

Two tables and one daily-check automation:

| Table | Purpose |
| --- | --- |
| **Recurring Tasks** | Definitions of what recurs and how often |
| **Tasks** | Real task instances (created by the automation) |

Each Recurring Task is the "template" — one row per recurring item. The Tasks table holds the actual work, with a link back to the Recurring Task that spawned it.

### Recurring Tasks fields

- **Name** — e.g. "Weekly client report," "Monthly inventory count."
- **Frequency** — single select: Daily / Weekly / Monthly / Custom.
- **Custom Days** — number (only for Custom frequency).
- **Day of Week** — single select (only for Weekly): Mon / Tue / ... / Sun.
- **Day of Month** — number (only for Monthly): 1-31.
- **Owner** — collaborator field.
- **Default Duration** — number of days to complete.
- **Active** — checkbox.
- **Last Created Date** — date populated by the automation.
- **Linked Tasks** — reverse link from Tasks table.

### Tasks fields

- **Name** — copied from Recurring Task.
- **Due Date** — calculated by automation.
- **Status** — single select: Not Started / In Progress / Done / Skipped.
- **Owner** — copied from Recurring Task.
- **Recurring Task** — linked record to source Recurring Task.
- **Completed Date** — date.

## The Daily-Check Automation

The core of the system: one automation that runs every morning and creates real Tasks for any Recurring Tasks due today.

### Setup

1. **Trigger:** Scheduled — every day at 6:00 AM in your team's timezone.
2. **Find records:** In Recurring Tasks, find rows where `Active = true` AND the recurrence pattern matches today.
3. **For each found row:** Create a Task record with:
   - Name = Recurring Task's Name (optionally append today's date).
   - Due Date = today + Default Duration.
   - Owner = Recurring Task's Owner.
   - Status = "Not Started."
   - Recurring Task = link to source row.
4. **Update:** Set the Recurring Task's Last Created Date = today.

### The "matches today" filter

The trickiest part. For each frequency type, the filter is different. Use a formula field on Recurring Tasks that returns true/false for "due today":

```javascript
// Formula field "Due Today"
SWITCH(
  {Frequency},
  'Daily', TRUE(),
  'Weekly', DATETIME_FORMAT(TODAY(), 'ddd') = {Day of Week},
  'Monthly', DAY(TODAY()) = {Day of Month},
  'Custom', IS_SAME(
    DATEADD({Last Created Date}, {Custom Days}, 'days'),
    TODAY(),
    'day'
  ),
  FALSE()
)
```

Then the automation's find action filters on `Due Today = true AND Active = true AND (Last Created Date != TODAY() OR Last Created Date is empty)`.

The last clause is what prevents double-creation if the automation accidentally runs twice in a day.

## Deadline Reminders

The second half of the system: ping the owner before tasks slip.

### The "Days Until Due" pattern

Add a formula field to the Tasks table:

```javascript
// Formula field "Days Until Due"
IF(
  AND({Due Date}, {Status} != 'Done', {Status} != 'Skipped'),
  DATETIME_DIFF({Due Date}, TODAY(), 'days'),
  BLANK()
)
```

This returns the integer count of days remaining (negative if overdue), blank if completed.

### Reminder automations

Build one automation per reminder window. Common windows:

- **7-day reminder** — trigger when `Days Until Due = 7`. Send email to owner: "Heads up, this is due next week."
- **2-day reminder** — trigger when `Days Until Due = 2`. Send Slack message to owner.
- **Due today** — trigger when `Days Until Due = 0`. Send a more urgent Slack message.
- **Overdue escalation** — trigger when `Days Until Due = -1`. Send Slack message to both owner *and* manager.

Each automation uses **When record matches conditions** as the trigger. The condition fires when the formula transitions to the matched value, which only happens once per task per window.

### Tracking which reminders fired

Optionally, add checkbox fields (`Reminder 7d Sent`, `Reminder 2d Sent`, etc.) and update them in each automation. This makes debugging easier and prevents re-sending if the formula re-fires.

## Escalation Patterns

For tasks that slip past the due date, escalation pings widen the audience.

### Escalation ladder

1. Day 0 (due today): Slack DM to owner.
2. Day +1 (1 day late): Slack DM to owner + email.
3. Day +3: Slack message to owner + manager.
4. Day +7: Slack message to owner, manager, and a #late-tasks channel.

Each step is an automation triggered by the formula transitioning to the matching `Days Until Due` value.

### Soft vs hard escalation

For low-stakes tasks (internal admin), keep escalations on internal channels. For client-facing or revenue-impacting work, escalate to leadership at day 3-5 and pause the task auto-creation until the cause is addressed.

## Daily Digest Pattern

Instead of (or alongside) individual reminders, send each owner a morning digest of their tasks for the day.

### Setup

1. **Trigger:** Scheduled, daily at 8:00 AM.
2. **Find records:** Tasks where `Owner = each user` AND `Due Date <= today + 1` AND `Status != Done`.
3. **Group by Owner.**
4. **For each Owner:** Send Slack DM (or email) with the formatted list of their tasks.

This works particularly well combined with the recurring-task automation — the morning digest naturally includes today's freshly created recurring tasks.

## Comparison: Reminder Strategies

| Strategy | Best For | Notification Channel |
| --- | --- | --- |
| **Individual reminder per window** | Critical, time-sensitive tasks | Slack DM |
| **Morning digest** | Day-to-day work | Slack DM or email |
| **Manager escalation** | Tasks blocking other work | Slack to manager channel |
| **Public escalation** | Repeatedly missed tasks | Public Slack channel |
| **No reminders** | Self-managed senior team | None — they own their queue |

Most teams mix two or three strategies.

## Common Mistakes

**Mistake 1: Creating recurring tasks in one mega-table without a source-of-recurrence table.** Hard to edit, hard to disable temporarily, no history. Always split definition (Recurring Tasks) from instances (Tasks).

**Mistake 2: Running the daily-check automation too often.** Once per day is enough. Hourly creates 24 duplicates per task if the dedup filter has a gap.

**Mistake 3: Reminder spam.** Three reminders per task per day across 50 tasks per user = 150 pings/day = muted Slack channel. Use the digest pattern for routine work.

**Mistake 4: Not handling skipped recurrences.** If a Monday weekly task is skipped, the next instance should still be next Monday — not Tuesday. The Last Created Date field handles this correctly only if you update it on creation, not on completion.

**Mistake 5: Forgetting timezones.** Scheduled triggers run in the automation owner's timezone. Document the schedule explicitly.

## Troubleshooting

**Recurring tasks created twice on the same day.** The dedup filter is missing or wrong. Confirm the filter checks `Last Created Date != TODAY()`.

**Monthly task didn't fire on day 31 in a 30-day month.** The formula should handle this: use `MIN({Day of Month}, DAY(LAST_DAY_OF_MONTH(TODAY())))` to cap.

**Reminders fire repeatedly for the same task.** The formula re-evaluates and re-triggers. Add a `Reminder Sent` field and filter on it in the trigger condition.

**Tasks created but Owner is empty.** The Recurring Task's Owner field is empty. Add a validation step or fall back to a default.

**Daily check missed a day.** Airtable's scheduled automations can occasionally miss runs during maintenance windows. Add a self-healing step: if last run was more than 25 hours ago, also create yesterday's missed records.

## Next Steps

A recurring task system is a building block for broader operational workflows: shift scheduling, inventory checks, maintenance rounds, content production calendars, client check-ins. Once the pattern is in place, layering on top — approval workflows, status reporting, completion verification — is straightforward.

For broader patterns, see our [Airtable task management with subtasks guide](/tutorials/airtable-task-management-with-subtasks), [project management guide](/tutorials/airtable-project-management), [approval workflow guide](/tutorials/airtable-approval-workflow), and [automation guide](/tutorials/airtable-automation-guide). For complex multi-team operational rollouts, [get in touch](/contact).


## Sitemap

See the full [sitemap](/sitemap.md) for all pages.
