A practical pattern for scheduled content with retries and partial failures.
You schedule a post in Airtable. Make finds it, publishes it to Instagram and Pinterest, and then updates the record. It works—until Pinterest fails after Instagram succeeds. On the next run, the same Airtable record is still eligible. If the scenario starts from the beginning, Instagram gets a duplicate.
The fix is to track the record's overall state and each destination's state separately. You also need to decide what happens when publishing succeeds but the status update fails. No simple filter can make a social platform and Airtable update atomically.
1. Set up the Airtable fields
In a Posts table, use these fields (adapt the names to your base):
| Field | Type | Example |
|---|---|---|
Title |
Single line text | Three ways to simplify scheduling |
Caption |
Long text | Source copy for the post |
Publish Date |
Date with time | A scheduled date and time |
Image URL |
URL | A publicly accessible image |
Status |
Single select |
Ready, Processing, Needs Review, Published
|
Instagram Status |
Single select |
Pending, Published, Failed, Uncertain
|
Pinterest Status |
Single select | The same choices |
Threads Status |
Single select | The same choices, if used |
Instagram Post ID |
Single line text | ID returned by the publisher, if available |
Pinterest Pin ID |
Single line text | ID returned by the publisher, if available |
Only add columns for platforms you actually use. Keep the platform post IDs or URLs when the publishing modules return them. They are useful when a timeout leaves the result uncertain.
2. Search for posts that are due
In Make, start with Airtable → Search Records. Use this Airtable formula:
AND(
{Status} = "Ready",
{Publish Date},
{Publish Date} <= NOW()
)
Sort by Publish Date ascending and start with a limit of one record per scheduled run. Set the Airtable field to include time, and check the base, field, and scenario time zones with a test record near midnight.
TODAY() is the wrong boundary for a timed schedule: it provides the date, not the current time. NOW() includes time, but Airtable does not guarantee a real-time refresh; its documented recalculation cadence can delay eligibility. If you need precise minute-level delivery, use a scheduling mechanism designed for that precision and test its behavior. See Airtable's date-function reference.
For a simpler existing base with an Is Published checkbox, AND({Is Published} = 0, {Publish Date} <= NOW()) is a reasonable eligibility filter. It is not a complete duplicate-prevention system.
3. Claim the record before publishing
After Search Records, use Airtable → Update a Record with the ID returned by the search. Set Status to Processing before reaching any social publishing module.
That keeps a later scheduled search from treating the record as Ready while an earlier run works on it. Run one worker for this queue and avoid manually starting a second copy of the scenario at the same time. Search followed by update is not an atomic lock: two overlapping runs could both read Ready before either writes Processing. For strict concurrency guarantees, use a store or queue with an atomic claim and a unique key for each post/destination; do not present this Airtable-only pattern as exactly-once delivery.
4. Record the result of each platform
Create your platform routes in Make. Before each publishing call, filter out a destination whose status is already Published. After a confirmed successful call, update its platform status to Published and save the returned post ID or URL. On a confirmed failure, mark that destination Failed and keep the other destinations' results. Test each error path: a failed module can prevent a normal update module after it from running.
Do not mark the whole record Published just because the first branch finished. A final Airtable update should set Status = Published only after every required destination has a confirmed success. If a platform failed or its outcome is unknown, set Status = Needs Review instead. Make's Router routes cannot be reconnected: use a separate finalizer run that reads every platform status, or design a sequential path with explicit error handling. Do not place an unconditional Published update at the end of any one branch.
| Overall status | Next action | ||
|---|---|---|---|
| Published | Published | Published | Stop |
| Published | Failed | Needs Review | Retry Pinterest only |
| Uncertain | Published | Needs Review | Check Instagram before retrying |
An error handler that merely skips a failed module can make the scenario appear complete while a platform remains unpublished. Make's error-handling and incomplete-execution settings deserve explicit testing; see Make's scenario settings and incomplete-execution options.
5. Treat timeouts as uncertain, not failed
A publishing request can reach a platform successfully, then time out before Make receives a response. Repeating it automatically may produce a duplicate. Mark that platform Uncertain; inspect the platform account or query the published item if your integration supports that. Retry only after you establish that the post was not created.
This is also why a fixed five-second sleep is not a duplicate-prevention strategy. A delay can help with a specific timing problem, but it cannot tell you whether a prior publish request succeeded.
6. Test the failure path
Before turning scheduling on, use test posts and run these cases:
- A future record must not be selected; a due
Readyrecord must be selected. - A successful publish on all required platforms must end with
Published. - If the second platform fails after the first succeeds, the first must remain
Publishedand the record must becomeNeeds Review. - A retry must skip the platform that already succeeded.
- A timeout with an unknown outcome must stop for verification rather than immediately republish.
- Two overlapping manual or scheduled runs must not be assumed safe; test your concurrency controls before increasing throughput.
The goal is recoverable publishing: each result is visible, and a failure does not silently reset the entire workflow. This pattern greatly reduces accidental duplicates, but neither Airtable nor a generic social API gives an automatic exactly-once guarantee across systems.
Disclosure: I created Small Budget, Big Results: SMM Automation Guide, a $15 guide with a PDF, an edited Make blueprint, and a setup checklist. The blueprint requires you to connect your own accounts, map your own fields, add retry filters, and test before scheduling. This article is free and self-contained; the guide covers the broader Airtable → Make → Gemini workflow.
Top comments (0)