Run client social reviews from one Hootsuite dashboard

Pick a client and a date range to see organic trends, paid campaigns and every post ranked best to worst, then generate the client report.

App
HootsuiteGoogle DocsGeneral Input DatabaseMarketingOperationsAI ReportsContent Generation
PromptCreate

I run social media for several clients and I want one dashboard I can open live in a client call, instead of wrestling Hootsuite's built-in reports into shape every month. Build me an app where I pick a client and a date range and everything about that client's performance is on one screen: organic trends, the paid campaign numbers for the same period, and a ranked list of the posts that actually ran.

Client groups. A client is a saved, named group of Hootsuite social profiles. Use Hootsuite's Retrieve Social Profiles to list every profile I can access, and let me put them into groups (for example Acme Corp is these four profiles). Store the groups in the app's own database so they persist and everyone on the team sees the same ones, and let me rename, edit or delete a group later. A client picker at the top of the dashboard switches between them and everything below reloads.

Date range. A date range picker with presets for last 7 days, last 30 days, this month, last month and last quarter, plus a custom range. Hootsuite analytics does not serve data older than two years, so clamp the earliest selectable date to two years ago and explain that inline rather than letting a request fail.

Organic panel. A handler calls Hootsuite's List Profiles and Metrics to pull daily organic numbers for every profile in the selected client group over the chosen range. Show summary tiles for the period (followers gained, total impressions, total engagement, engagement rate) and below them trend charts for followers, impressions and engagement over time, with one line per social profile plus a combined total, and a legend I can click to isolate a network.

Paid panel. A handler calls Hootsuite's List Paid Metrics for campaign, ad set and ad performance over the same period, and it sits directly beside the organic panel so paid and organic are finally on one screen. Show spend, impressions, clicks, conversions and cost per result, with a drilldown from campaign to ad set to ad. Plenty of my clients do not run ads at all: when there is no paid data, the paid panel should quietly collapse to a small line saying there was no paid activity in this period. It must never show an error.

Post leaderboard. A handler calls Hootsuite's List Posts and Metrics for the posts published in the range across the client's profiles, rendered as a ranked, sortable table. Default to best performing first, with a toggle to flip to worst first. Each row shows the post text or excerpt, thumbnail, network, publish date, and its impressions, engagement, engagement rate and clicks, and links out to the live post so I can point at it during the call.

Comparison toggle. A 'Compare to previous period' switch that fetches the immediately preceding window of equal length and shows it alongside the current one: previous value and percentage change on every summary tile, on the paid numbers and on the leaderboard totals, coloured for up or down, plus a dashed comparison series on each trend chart.

Batching and limits. Hootsuite's analytics endpoints accept at most 10 social profile ids or 10 ad accounts per request, so handlers must split a client group into chunks of 10, run them, and stitch the results back into one dataset before the UI sees it. Analytics pagination uses a different cursor shape from the rest of the Hootsuite API: follow metadata.collectionInfo.next.cursor and request the maximum limit of 100 per page. Hootsuite allows 20 requests per second, so throttle the chunked calls to stay under that.

Access empty state. Reading these numbers requires the analytics:read scope, which is off by default and depends on the Hootsuite Advanced Analytics add-on. If that access has not been granted, the dashboard should show a clear explanatory empty state saying the Advanced Analytics add-on is required and what to do about it, rather than surfacing a raw API failure.

Write the client report. Put a 'Write the client report' button on the dashboard that kicks off a background agent for the currently selected client and date range. The agent pulls the same organic, paid and per-post numbers, compares them to the immediately prior period, and works out the story: what moved and by how much, which specific posts drove the change, how paid and organic interacted, and what to do differently next month. It then creates a new document with Google Docs Create Document titled with the client name and period, and fills it in with Batch Update Document as a formatted, client-ready report: headline summary, a results table, organic trends by profile, paid performance, top and bottom posts with commentary on each, and clear recommendations. Use real heading styles, bold, bullet lists and tables so the doc looks finished and needs no reformatting before it goes to the client.

Report history. Save each generated report's document link, client, period and generation date in the app's database, and show them in a Reports list on the dashboard so the whole team can find past reports later. While the agent is running, show its progress on the dashboard, and surface the document link the moment it finishes.

Styling: dense but legible, built to be read off a shared screen on a video call. Charts should be large enough to read at a glance and numbers should be easy to point at. Loading each panel independently is fine, so the organic charts can appear before the paid numbers finish.

What does this prompt do?

  • Group your social profiles into named clients once, then switch between them with one click and pull up any date range going back two years.
  • See follower, impression and engagement trends for every profile next to the paid campaign numbers for the same period, so organic and paid finally sit on one screen.
  • Rank every post that actually ran, best and worst first, so you can point at exactly what worked while the client is watching.
  • Flip on comparison to show the previous period beside the current one, with the percentage change on every number.
  • Press one button and a background assistant writes the whole client report into a formatted Google Doc, linked back on the dashboard for the rest of the team.

What do I need to use this?

  • A Hootsuite account with the Advanced Analytics add-on, which is what unlocks the performance numbers this dashboard reads.
  • The social profiles for each client already connected in Hootsuite.
  • A Google account so the generated client reports can be saved as Google Docs.
  • Paid campaigns are optional: clients who do not run ads simply see the paid section collapse.

How can I customize it?

  • Change which numbers lead the summary tiles, for example putting engagement rate ahead of raw impressions.
  • Adjust the date presets to match how you bill, whether that is monthly, quarterly or per campaign flight.
  • Rewrite the structure and tone the assistant uses, so the finished Google Doc matches your agency's report template.

FAQs

Do I need the Hootsuite Advanced Analytics add-on?
Yes. The performance numbers this dashboard shows come from Hootsuite Analytics, which is a paid add-on. If your account does not have it, the dashboard shows a short explanation of what to turn on instead of a broken screen.
How far back can I report on?
Up to two years. Hootsuite does not keep social analytics older than that, so the date picker stops there rather than handing you empty charts.
What happens for clients who do not run paid ads?
The paid section quietly collapses and you get organic performance on its own. Nothing errors and nothing looks broken in front of the client.
Can one client have more than ten social profiles?
Yes. Hootsuite only lets ten profiles be looked up at a time, so the dashboard fetches bigger client groups in batches behind the scenes and stitches them into one set of numbers.
Where do the generated reports end up?
Each report is created as a Google Doc in your Google account and listed on the dashboard with the client name and period, so anyone on the team can find past reports later.
Does this replace Hootsuite's own reports?
For client reviews, usually yes. This is built for the moment you are on a call and need organic, paid and per-post performance in one place, with the previous period beside it, rather than exporting and reshaping a fixed report.

Related templates

Find the customers stuck contacting support again and again

A board that ranks the people who opened three or more separate support conversations this month, reads their threads, and files the real fix.

Kustomer
Linear
General Input Database
App
Catch the trials quietly dying before the card gets charged

Open one desk each morning to see every account still in a trial, ranked by how much money is at stake against how little they have actually used.

Intercom
Stripe
General Input Database
App
Run your Webflow site translations from one review desk

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.

Webflow
JigsawStack
Slack Bot
+1
App
Legal contract intake desk your teams use instead of email

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.

Ironclad
Slack Bot
General Input Database
App
Track which pages and brands win your buyers' questions

A board of the questions your buyers ask, showing where your pages land, which competitors show up instead, and what you lost since the last check.

Internet Search
General Input Database
Google Docs
+1
App
Turn shipped Linear work into Intercom product announcements

A board your product marketer opens on every ship day to turn finished engineering tickets into announcements customers actually read in your Messenger.

Intercom
Linear
Slack Bot
+1
App

Stop rebuilding the same client report every month.

Open one dashboard in the call, and let the write-up build itself afterwards.