Evergreen social library: put your best posts back to work

Rank everything you have published, save the winners with topic tags, and reschedule them with a fresh caption once the cooldown clears.

App
bundle.socialGoogle SheetsMarketingContent GenerationAI ReportsData Sync
PromptCreate

Build me an evergreen content library app on top of bundle.social. Most of my best social content only ever ran once, so I want a place where I can mine what already worked, curate it, and put it back to work on a schedule I control. The library itself is the app's persistent state, so it has to survive between sessions rather than being rebuilt on every load.

The main screen is a ranked table of everything I have published. Build it from the bundle.social "Get post list" operation filtered to status POSTED for a date range and team I choose in the toolbar, then enrich each row with "Get Bulk Post Analytics" so the table can show likes, comments, shares and views per post. Columns: media thumbnail, caption excerpt, platform, published date, and the four engagement metrics plus a total. Default sort is engagement descending so the winners float to the top, and I can re-sort by any metric or filter by platform. Both endpoints paginate, so the handler needs to page rather than fetch everything at once: the post list uses offset and limit against a returned total, and bulk analytics caps at 60 posts per paginated request, so chunk the post ids into batches of 60.

Analytics from bundle.social are cached, not live, so never imply the numbers are real time. Show a "last updated" stamp on the table and on each row, and give me a refresh control that calls "Force refresh post analytics" for the rows I select and then re-reads them. For a single post opened in detail, use "Get Post Analytics" for the normalized likes, comments, shares and views.

Each row has a checkbox. I tick the posts worth keeping and hit a button that adds them to the evergreen library. A library entry stores the source post id, the caption text, the media upload ids attached to the original, the original platform and publish date, and a snapshot of the original performance numbers taken at the moment I saved it. Entries also carry topic tags that I control: I can create, rename and delete tags, and assign several to an entry. The library view is a filterable list or grid by tag, showing for each entry the original performance, how many times it has been re-run, the date of the last re-run, and how the re-runs performed against the original as a per metric delta or percentage.

To repost, I open a library entry in a composer. The composer reuses the original media by upload id rather than re-uploading anything: read the media back with "Get upload list" or "Get upload" and show a preview so I can confirm it is the right asset. It has an AI rewrite action that produces a fresh version of the caption, keeping the hook and the point but not the exact wording, with the option to generate another variant and to edit the text myself. I pick which connected account the repost targets, and it does not have to be the same platform as the original, so a LinkedIn winner can go out as an Instagram post. Where I am posting to more than one platform at once, give me per platform text fields, which map onto the per-platform data object that "Create post" takes alongside the shared payload. I choose a date and time and the composer schedules it with "Create post". A scheduled repost that has not published yet stays editable in the app through "Update post".

Never queue a byte identical repost. If the caption I am about to schedule matches the original exactly, block the schedule action and tell me to rewrite it, because republishing identical text repeatedly across accounts can itself cause account problems.

Enforce a cooldown that I set in settings, defaulting to 90 days. Any entry whose last run, original or repost, falls inside that window is greyed out in the library with its repost action disabled, showing the reason and the date it becomes eligible again. Keep it visible rather than hiding it. Separately, when I schedule a repost, check the other reposts already queued and warn me if another library entry sharing a topic tag is scheduled in the same calendar week, so I do not flood one theme.

After a repost publishes, the entry records the new post id, increments its re-run count, updates the last re-run date, and pulls that post's analytics so the comparison against the original fills in over time.

Give me a sync button that pushes the whole library out to a Google Sheet I nominate, using "Update Values" or "Batch Update Values" with a header row and one row per entry: caption excerpt, topic tags, original platform, original likes, comments, shares and views, times reposted, last re-run date, and next eligible date. Rewrite the sheet on each sync so it always reflects current state, and show me when it last synced. The team should be able to browse the bank of proven content from the spreadsheet without opening the app.

Settings holds the bundle.social team, the default date range for the ranked table, the cooldown in days, the topic tag list, and the target spreadsheet and tab.

What does this prompt do?

  • Ranks every post you have published over a date range you pick by likes, comments, shares and views, so the winners float to the top
  • Lets you tick the keepers into an evergreen library with your own topic tags, and remembers how many times each one has been reposted and how those reposts did against the original
  • Opens a composer that reuses the original photo or video, rewrites the caption so it is never a word for word repeat, and schedules it to any channel you have connected, including one the post never ran on
  • Keeps a shared Google Sheet in sync with tags, original performance and last repost date, and greys out anything still inside the cooldown window you set

What do I need to use this?

  • A bundle.social account with your social channels connected
  • Posts already published through bundle.social, so there is history worth ranking
  • A Google account and a spreadsheet your wider team can open
  • A cooldown you are happy with, for example nothing goes out again within 90 days

How can I customize it?

  • Change the cooldown length, or set a different one per topic tag
  • Edit the topic tag list and decide which metric ranks the main table
  • Pick which channel each repost goes to and adjust the wording separately per channel
  • Choose the spreadsheet and tab the library syncs into, and how often you push it

FAQs

Will the repost be a word for word copy of the original?
No. The composer rewrites the caption for you before anything is scheduled, you can edit the result, and the app refuses to queue a post whose text is identical to the original. Publishing the exact same wording over and over is a good way to get flagged by the platforms, so this is deliberate.
Can I repost a LinkedIn winner to Instagram instead?
Yes. When you open a library entry you choose which connected channel the repost goes to, and it does not have to be the one the original ran on. You can also give each channel its own wording in the same scheduled post.
Do I have to re-upload the photo or video?
No. Every library entry remembers the media that was attached to the original post and the composer reuses that same file, so there is nothing to find on your desktop or download again.
How current are the numbers in the ranked table?
Engagement numbers are cached rather than live, so the table shows you when each row was last updated and gives you a refresh button for the posts you care about. That way you know whether you are looking at this morning's numbers or last week's.
What stops me flooding one topic in the same week?
Two guards. The cooldown greys out any entry that went out too recently and tells you the date it becomes eligible again, and if you try to schedule an entry into a week that already has another entry with the same topic tag queued, the app warns you before you confirm.
Can the rest of the team see the library without opening the app?
Yes. The library syncs out to a Google Sheet with the topic tags, the original performance, the number of reposts and the last repost date, so anyone can browse the bank of proven content from the spreadsheet.

Related templates

Prospecting desk that builds account lists from the live web

Stop buying stale lists. Reps run a saved search, work the results like an inbox, and only the accounts they approve ever reach your CRM.

Hyperbrowser
HubSpot
Google Sheets
App
Influencer campaign roster board with AI creator briefs

Drag creators through Sourced to Wrapped on a board grouped by campaign, with audience stats on every card and a one-click brief for each creator.

HypeAuditor
Google Sheets
Notion
App
Morning repricing console for Shopify with margin-safe rules

Pick a repricing rule, send an assistant out to check competitor pages, then approve the new prices that clear your margin floor.

Hyperbrowser
Shopify
Google Sheets
App
Pre-flight bounce check before you launch a cold email sequence

See the projected bounce rate for any outbound send before it goes out, and keep the launch button locked until the list is clean enough to be safe.

Hunter
Google Sheets
App
Per-device electricity cost explorer for your smart home

Pick any date range and see what each device in your home actually cost to run, not just how many kilowatt-hours it used.

Home Assistant
Google Sheets
App
Build a PR media list from real worldwide news coverage

Search three months of global coverage on your topic, rank the outlets actually writing about it, and draft a tailored pitch for each one.

GDELT
Google Sheets
Gmail
App

Stop letting your best posts run once.

Turn everything that already worked into a library you can reschedule, rewrite and share with the team.