Instagram UGC rights tracker and repost approval board
See every customer photo that tags your brand, ask for permission in one click, and repost only once a yes is on the record.
I run an ecommerce brand and I want an app that turns the customer photos and videos people post about us into a rights-cleared repost pipeline. Today we screenshot things and lose track of who said yes, so the permanent permission record is the whole point of this app, not a nice extra.
The main surface is a board of candidate user generated content grouped into five status columns: Spotted, Permission requested, Approved, Reposted and Declined. Each card shows the creator handle, the image or video thumbnail, the caption, a link to the original post, and follower and engagement context for that creator so we can judge whose post is worth chasing. Cards move between columns by drag or by a status control on the card, and every move writes to the ledger described below.
Three separate discovery handlers fill the Spotted column. The first calls Instagram Get Tagged Media for posts where our account was tagged. The second calls Instagram Get Mentioned Media for posts that @mentioned us in the caption. The third resolves our branded hashtag with Instagram Search Hashtag to get the hashtag id, then calls Instagram Get Hashtag Media for recent public posts using it. Let me set which hashtags are watched and how far back each handler looks. Deduplicate across all three sources by media id so a post that both tags us and uses the hashtag becomes one card, and record which source or sources found it. For each distinct creator handle, enrich the card with Instagram Business Discovery to pull follower count and recent post engagement, and cache that so we are not re-fetching the same creator on every board load. Creators whose accounts are not Business or Creator accounts will not resolve through Business Discovery, so show the card without the follower context rather than dropping it.
From a card I can hit "Ask for permission". That sends a templated message to the creator: use Instagram Send Direct Message when the post tagged us, and Instagram Reply to Mention when they mentioned us in a caption, since that is the reachable channel in that case. Sending stamps the request time on the card, stores the exact outgoing wording, and moves the card to Permission requested. Show how long a request has been outstanding on each card in that column so nothing sits forgotten.
When a creator agrees, I paste or confirm their reply text on the card and mark it Approved. That reply text is the logged yes. The Repost button stays locked until a logged yes exists on the card, and the lock reason should be visible on the card rather than the button just being dead. Hitting Repost calls Instagram Create Media Container with the public asset URL and the credit caption, waits for the container to be ready before publishing (video and Reel containers process asynchronously, so poll the container status until it reports FINISHED), then calls Instagram Publish Media with the returned creation id. Before creating a container, call Instagram Check Publishing Limit and block the action with a clear message when we are at or near the cap of 50 posts per 24 hours for the account. The asset source has to be a public URL that Meta can reach, so validate that we have one and say so plainly on the card when we do not.
Every status change writes to an Airtable rights ledger so there is a permanent audit row. Use Airtable Create Records when a card is first logged and Airtable Update Record on every subsequent change, holding the creator handle, the permalink to the original post, the media id, the discovery source, the exact permission request text and the exact reply text, the request and response timestamps, the current status, the credit caption used, the repost date and the permalink of our republished post. The board reads back from Airtable List Records so the ledger is the source of truth for card state, not app memory. If the same media id already has a ledger row, update it instead of creating a duplicate.
When a card moves to Approved, post to our social channel with Slack Bot Send a Message so someone picks it up and schedules it. The message should carry the creator handle, the link to the original post, their follower count, and the reply text they granted permission with.
Add an embedded background agent behind a "Draft the ask" button on each card. It reads the creator's own caption, the product visible in the post, and their Business Discovery profile, then writes two things in our brand voice: the permission request message and the credit caption that tags the original creator. Both land back on the card as editable text so I can tweak before anything sends, and the drafted request becomes the default body when I hit Ask for permission. Let me store a short brand voice note and an example of a good ask that the agent uses as guidance.
Bake in these business rules throughout: no repost without a logged yes on the card, publishing requires a publicly reachable asset URL, publishing is capped at 50 posts per 24 hours per account, and only Instagram Business and Creator accounts are reachable at all. Declined cards stay on the board with their reason so we do not re-ask the same creator.
What does this prompt do?
- Gathers every recent post that tags your brand, mentions you in a caption, or uses your hashtag, and lays them out on a board grouped by Spotted, Permission requested, Approved, Reposted and Declined.
- Shows the creator handle, the photo or video, and their follower and engagement numbers on each card so you can tell whose post is actually worth chasing.
- Sends a templated permission request to the creator straight from the card and stamps the time you asked, with a Draft the ask button that writes the message and the credit caption in your brand voice.
- Keeps a permanent rights ledger in Airtable holding the creator handle, the link to the original post, the exact request and reply wording, and the repost date, and pings your social channel in Slack the moment someone says yes.
What do I need to use this?
- An Instagram Business or Creator account linked to your brand's Facebook Page. Personal Instagram accounts cannot be reached.
- An Airtable base with a table to hold the rights ledger, one row per piece of customer content.
- A Slack workspace and the channel your social team watches.
- Your branded hashtag, and a photo or video that is publicly viewable, since reposting works from a public link to the original asset.
How can I customize it?
- Change which hashtags the board watches and how far back it looks for tagged posts and caption mentions.
- Edit the permission request wording and the credit caption template, or let the drafting assistant write both from the creator's own caption and the product in the shot.
- Choose which Slack channel gets the heads up, and set a follower or engagement floor so the biggest creators surface at the top of Spotted.
FAQs
Do I really need permission to repost a customer's photo?
Will this work with a personal Instagram account?
How many posts can I repost in a day?
What if the creator says yes somewhere other than a DM?
Where does the permission record actually live?
Related templates
Stage a batch of filings overnight, then approve each completed form from a screenshot before anything is ever submitted.
Pick a client and a date range to see sent, replies, meetings booked and the real deal value your cold email produced, campaign by campaign.
Review every conversation Fin closed as resolved, judge which ones actually stuck, and see what the gap is worth against your bill.
Merge your IT, HR and Facilities queues into one list ranked by SLA time left, then reply, change status and escalate without ever opening Jira.
See every page's translation status at a glance, edit translations side by side with the English, and publish only what your team has actually approved.
One place for sales and ops to request an NDA or vendor agreement, watch its status, and let legal launch the contract in a single click.
Stop losing the yes in your DMs.
Give your social team one board where every customer photo, permission request and repost is on the record.