Skip to content
Scheduled import

Schedule Airtable to WordPress publishing without duplicates

A schedule only helps if Monday’s run updates Friday’s posts. Duplicate sprawl is what you get when matching isn’t designed before the first automatic run.

Turn the schedule on only after a second manual run updates existing WordPress IDs. Until then, every import is a test, not a publisher.

Why duplicates happen

CauseWhat you see
No stable key between the Airtable record and the WordPress objectA new post every run
Matching only on titleA title tweak creates a second post
Re-importing after the plugin’s map data was deletedOrphans plus new clones
Two connections targeting the same tableRacing creates
CSV import and plugin import on the same rowsParallel copies

What safe re-import requires

  1. A persistent map of Airtable record ID to WordPress object ID, stored by the importer.
  2. Optional match keys: slug for posts, email or username for users, so existing content can be attached.
  3. Status on the row, mapped to draft or publish, so a later import updates the same object.
  4. Unchanged rows skipped when mapped values match the last successful run, so Sync History can show zero updates after a clean re-run.
  5. One owner connection per destination entity.
  6. Logged runs so you can see created versus updated counts.

Integration for Airtable stores the record-to-object map and supports optional matching by slug, email, or username. Free schedules are daily and weekly. Pro adds every 15 minutes, every 30 minutes, hourly, every 6 hours, twice daily, daily, and weekly, plus delete-missing.

Recommended publish workflow

Step 1
Set status in Airtable

Editors set Status to draft or publish. pending, private, and future work too.

Step 2
Map that column, and keep the rows

Rows you want updated must stay in the import. Filtering them out means the next run cannot touch them.

Step 3
Map slug from a dedicated column

Don’t regenerate a random slug on each run.

Step 4
Run manually until the counts look right

Start with Dry run to preview creates and updates, then Import now. Read created versus updated in Sync History before any schedule exists. On Pro, use delete-missing on a full-table import; with a view or filter, keep Status on the row so later runs can still update those posts.

Step 5
Enable the schedule after a clean re-run

A clean second run produces zero unexpected new posts. Unchanged mapped values are skipped, so updated counts stay quiet until an Airtable cell actually changes.

Step 6
Change a title and confirm the same ID

If WordPress creates a new post ID, stop and fix matching before the schedule runs overnight.

WP-Cron realities

WordPress schedules often depend on traffic unless the host runs system cron.

  • Low-traffic sites make schedules feel late.
  • The fix is real cron hitting wp-cron.php, or the host scheduler.
  • After a deploy, confirm the schedule still appears in the cron list.

Users and taxonomies

  • Users: match on email. Map roles to subscriber, contributor, author, editor, or custom non-administrator roles your site already defines.
  • Terms: keep slugs stable, and watch parent and child linked records.

When duplicates already exist

  1. Pause the schedule.
  2. Dedupe WordPress by hand. Keep the post that has the correct map and the traffic.
  3. Make Airtable slugs and emails unique.
  4. Re-link with match-on-slug or match-on-email if you can attach to existing objects.
  5. Run once, verify updates, then turn the schedule back on.

Questions: support@ripplestep.com.

Run the connection twice before you schedule it

Confirm Sync History shows updates to existing IDs. Install Integration for Airtable if you need that map and a schedule without a Zap.

Install Integration for Airtable free