Decide which old blog posts to refresh, merge, or leave

Rank your published archive by how badly each post is fading, see who is now out-covering you on the topic, and log a verdict for every one.

App
BuzzSumoAsanaGoogle SheetsMarketingOperationsResearch & MonitoringContent Generation
PromptCreate

Build me an app my content team opens at the start of every refresh cycle to decide which of our own published articles to update, merge, or leave alone. It replaces the spreadsheet ritual where we export every blog URL, paste in metrics, and score each post by hand. It uses BuzzSumo for the research, Asana for the work that comes out of it, and Google Sheets as the decision log.

Settings the app needs, saved and editable in the app: our site domain (for example ourcompany.com), the Google Sheet ID and tab name for the decision log, and the Asana workspace and project where refresh tasks are filed. Optionally a lookback window, defaulting to everything published more than six months ago.

The main view is a sortable table of our own articles, fetched with BuzzSumo Search Articles using a site: query on our domain (q = site:ourcompany.com). Columns: article title linking to the URL, publish date, total engagement (sum of the Facebook, Twitter, Pinterest, and Reddit share fields BuzzSumo returns), evergreen score, number of linking domains, decay score, and current verdict if one was already logged. Every column sorts, and the table opens sorted by decay score worst first. Let me filter by publish year and by whether an article has been reviewed.

The decay score is a transparent 0 to 100 number where higher means it needs attention sooner. Compute it from what BuzzSumo actually returns: months since publish, engagement relative to the median engagement of the articles in the fetched set (well below median is the strongest decay signal), a low evergreen score, and the number of linking domains, which raises priority rather than lowering it because a heavily linked post that is slipping is the most valuable thing to fix. Once I have opened an article's detail panel, fold in the count of newer competitor pieces on the same topic and raise the score accordingly. Show the component breakdown in a tooltip or small popover so nobody has to trust a black box, and keep the weights in one place in the code so they are easy to tune.

Quota is the hard design constraint. Paid BuzzSumo plans include only about 100 Search API calls per month, so the app must never search on render, on mount, on tab focus, or on any automatic interval. Every search runs only when I press an explicit button. Cache the article list per domain and cache each article's detail results per URL, both persisted server side so a page reload does not refetch. Show a clear as of timestamp next to any cached result, with a Refresh button beside it that spends a call only when I choose to. Keep a visible counter of how many searches this app has spent in the current calendar month so the team can see the budget draining, and warn me before an action that would spend several calls at once.

Clicking a row opens a detail panel for that article. On first open, and only behind a Load live data button, it runs three things: BuzzSumo Get URL Share Counts for the article's current numbers so I can compare them against what the table shows, BuzzSumo Search Backlinks for that URL to list who links to it with each linking page's authority, and a second BuzzSumo Search Articles call for newer competitor coverage of the same topic. Build that competitor query from the article's main topic keywords plus -site:ourcompany.com to exclude ourselves, with a begin_date around the article's publish date so it only returns pieces published after ours. Note that BuzzSumo date parameters are Unix timestamps in seconds, not ISO strings. Cache the whole panel per URL with its own as of stamp, so reopening a row I already loaded costs nothing.

From the detail panel I set a verdict of Refresh, Merge, or Leave, with a free text reason. Refresh creates an Asana task with Create a Task in the configured project, titled after the article, with a description containing the article URL, the competing pieces the panel surfaced with their engagement numbers, the decay score, and my reason. Show me the created task link in the panel afterward. Merge and Leave create no task, only a log entry, though Merge should let me name the target article we would merge into and include that in the log.

Every verdict, whatever it is, appends a row to the Google Sheets decision log with Append Values: article URL, title, publish date, decay score at review time, verdict, my reason, the merge target if any, the competitor URLs cited, the Asana task link if one was created, who reviewed it, the review timestamp, and a cycle label such as 2026-Q3. On load the app reads that log back with Get Values and uses it as memory: any article with a logged verdict is treated as settled and hidden from the main queue by default, so the board never re-surfaces something we already decided. Include a Show reviewed toggle that reveals settled articles with their verdict and reason visible, and let me deliberately reopen one if circumstances changed. Because each review is stamped with a cycle label, starting a new cycle can optionally clear the slate and reconsider older verdicts.

Be honest in the interface about what this data can and cannot tell us. BuzzSumo measures social engagement and backlinks, not search traffic, so the app must never imply it detected a traffic drop. Put a short line of copy near the decay score explaining that the signal is falling shares plus newer competitor coverage of the same topic, and that a rewrite decision should be confirmed against our own analytics. Also keep in mind that BuzzSumo searches cap at roughly 1,000 records (10 pages of 100), so for a large archive let me narrow by publish year and audit in slices rather than silently truncating.

Handle the failure cases plainly. If BuzzSumo returns a quota error, say the monthly search allowance is exhausted and keep showing the cached results with their as of timestamps instead of blanking the screen. If the decision log sheet is empty or missing headers, write the header row on first use.

What does this prompt do?

  • Lists your own published articles in one sortable table with publish date, total engagement, evergreen score, and how many sites link to each one
  • Scores every post for decay so you can sort worst first and start the review where it actually matters
  • Opens a detail panel per article with its current share counts, the sites linking to it, and newer competitor pieces covering the same topic
  • Turns your call into action: a Refresh verdict files an Asana task with the URL, the competing pieces, and your reasoning
  • Remembers every verdict in a Google Sheets decision log, so posts your team already settled never clutter the queue again

What do I need to use this?

  • A BuzzSumo account on a paid plan, since search access is not included with free trials
  • The domain of the site whose articles you want to audit
  • An Asana project where refresh tasks should be filed
  • A Google account and a Google Sheet to hold the decision log

How can I customize it?

  • Change how the decay score is weighted, for example counting age and fading shares more heavily than the number of linking sites
  • Rename or add verdicts if your team uses different labels than Refresh, Merge, and Leave
  • Point refresh tasks at a different Asana project, or add the assignee and due date your content calendar expects
  • Stamp each review with a cycle name, so a brand new quarterly audit can deliberately reconsider posts settled long ago

FAQs

Does this tell me which posts lost search traffic?
No, and that is deliberate. BuzzSumo measures social engagement and backlinks, not Google traffic. The honest decay signal here is fading shares on your post combined with newer competitor coverage of the same topic. Treat it as a prioritized shortlist of what to investigate, and confirm against your own analytics before a big rewrite.
Will this eat through my BuzzSumo search allowance?
Not on its own. Paid plans include only about 100 searches a month, so the app never searches when you simply open or scroll it. Searches run only when you press the button, results are cached per domain and per article, and every screen shows an as of timestamp so you know how fresh the numbers are.
What actually happens when I choose Refresh?
The app creates a task in your Asana project containing the article URL, the newer competing pieces it found, and the reason you gave. Your writers get a brief with the evidence already attached instead of a bare link.
Can my whole content team use this at once?
Yes. Every verdict is appended to a shared Google Sheet that the app reads back when it loads, so once someone marks an article as settled it drops out of the queue for everyone and nobody reviews the same post twice.
How many of our articles can it pull in?
Searches return up to roughly 1,000 articles, which covers most blogs. For a very large archive, narrow the date range and audit it in slices, for example one publishing year at a time.
Do we still need our old content audit spreadsheet?
No. This replaces the usual ritual of exporting every URL to a sheet, pasting in metrics, and scoring posts by hand. The metrics arrive already attached to each row, and the decision log is written for you as you go.

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 rebuilding your content audit spreadsheet every quarter.

Open one board, work your archive worst first, and let every refresh, merge, and leave decision record itself.