Content and discovery
One library, two feeds, one queue
A post that lives in three places — a folder, a chat thread, and somebody's head — goes out twice or not at all. One library fixes that: approved once, stored once, pulled from a dated queue. Instagram will take the publishing call. Xiaohongshu, on the public record we could read, will not, so the second lane ends at a person rather than at an API. That asymmetry is the design, not a gap in it.
- Triggers
- Two
- Runs
- Daily
- Stack
- 4 tools
- Durable execution
- Not required
The flow
The top track builds the library. The bottom track empties the queue. Two triggers, because an asset is ready when it is ready and a post goes out when it is due, and those are never the same moment.
An asset is approved
Sheets · Airtable
Derive what each feed needs
n8n · Make
Write one library row
Sheets · Airtable
Every morning
n8n schedule
Take what is due today
n8n
Which surface?
n8n IF
Create, then publish
Instagram Graph API
Hand it to a person
Slack · WhatsApp
Step by step
- 01
An asset is approved
Sheets · AirtableApproval is the trigger, not upload. A file sitting in a folder is a draft; the moment somebody signs it off is the moment it becomes schedulable.
- 02
Derive what each feed needs
n8n · MakeCut the caption per feed and produce a JPEG derivative. The publishing API will not accept anything else for a still, so the conversion belongs here rather than at send time, when it becomes a failed post.
- 03
Write one library row
Sheets · AirtableOne row per asset: the surfaces it is cleared for, the date it is queued, and whether it has gone out. This row is the calendar. A second calendar somewhere else is how a post gets published twice.
- 04
Every morning
n8n scheduleRuns whether or not anyone is at a desk. A queue nobody empties is just a folder with dates written on it.
- 05
Take what is due today
n8nRead the library for rows dated today and not yet sent. Sent is a state on the row, not an assumption.
- 06
Which surface?
n8n IFThe split is not a preference. One of these two surfaces documents a publishing endpoint and the other does not, so they cannot end the same way.
- 07
Create, then publish
Instagram Graph APITwo calls: build the media container, then publish it. Build it at send time — a container created when the calendar was planned expires before the queue reaches it.
- 08
Hand it to a person
Slack · WhatsAppThe Xiaohongshu lane ends in a message carrying the caption, the image and the intended time. Automating everything up to the last step is still most of the work, and it is honest about where the automation stops.
What the platform will not allow
The queue's shape is set by two published ceilings and one absence of documentation.
"Instagram accounts are limited to 100 API-published posts within a 24-hour moving period." A backlog released all at once meets that ceiling, so the queue has to pace itself rather than drain.
Instagram Platform — Content PublishingA media container that is not published within 24 hours expires. Containers therefore have to be created at send time, not when the calendar is planned — which is exactly the mistake a scheduling tool invites.
Instagram Platform — Content Publishing"Carousels are limited to 10 images, videos, or a mix of the two", and "JPEG is the only image format supported". The library has to hold a JPEG derivative, not only the designer's original file.
Instagram Platform — Content PublishingXiaohongshu's open platform does publish its API reference openly, and it is a merchant API set: order, after-sales, product, inventory, material centre, logistics, finance. The material centre manages listing assets, not notes. No content-publishing category appears in the public navigation, so we make no claim that a note can be published there programmatically.
小紅書開放平台 — API 文件導覽
When this is not worth building
Three cases where the upkeep costs more than the double-posts.
You publish a handful of posts a week and one person decides each one on the day. The queue then holds a copy of what already lives in their head, and the copy is the thing that goes stale.
The two feeds share no assets. If every Xiaohongshu note is written natively and every Instagram post is shot for Instagram, there is no library to share — there are two workflows wearing one name.
Nobody owns approval. A queue publishes what is in it, at the time on the row. Without a person who decides what enters, the automation has only made the wrong post punctual.