Daily
Summarise new App Store reviews for your product team in Slack
Each day new App Store reviews are stored in Pinecone and a summary of the main complaints and praise is posted to Slack.
- Runs
- Daily
- Apps
- Pinecone, Slack
- AI
- Yes, uses the built-in AI allowance
- Access
- Pinecone read+write; Slack chat:write
Send this to your assistant
Create a ClickRuntime automation: every morning, fetch new App Store reviews for my app, add them to Pinecone, and post a summary of the main complaints and how often they've come up before to #product.
First time? Adding ClickRuntime to your assistant takes about two minutes.
Why use it
Why teams use this automation
App Store reviews are honest product feedback, but they arrive one at a time and nobody reads them all. Recurring complaints, such as a login bug or a confusing screen, take weeks to be noticed because each review looks like an isolated case.
Product managers, mobile developers and support leads use it to see each day's themes, and whether a complaint is new or has been building for weeks.
What you get out of it
Themes, not a stream
Reviews are grouped into a few clear complaints and compliments.
Is it new or recurring?
Similar past reviews are found in Pinecone, so the summary says when an issue keeps coming back.
Shared with the whole team
Developers, designers and support see the same feedback in Slack.
A searchable archive
Every review is stored, so you can later look up all feedback about a feature.
How it works
What happens, step by step
Every morning, ClickRuntime reads the latest reviews of your app from the App Store's public feed.
Reviews it has already seen are skipped, and new ones are added to your Pinecone index.
For the new reviews, similar older reviews are looked up to see which issues keep recurring.
AI writes a short summary of complaints and praise, and it is posted to your Slack channel.
Before it runs live
- Connect Pinecone
- Connect Slack, then invite the app to the channel (type /invite @ClickRuntime there)
What you get
Build your own
Need it to work differently?
Your own rules
Conditions, thresholds, filters and exceptions, written the way you'd explain them to a colleague.
Any number of apps
One automation can read from one app and update several others. Over 248 apps are ready, and anything with an API works too.
AI where it helps
Summaries, classification, extraction and drafts use ClickRuntime's built-in AI, with no extra key.
On a schedule or on each event
Runs as often as every 5 minutes, or the moment an app sends an event, and keeps track of what it already handled.
Changes you can ask for
- Run it at a different time, more or less often, or only on weekdays
- Change what the AI looks for, or how it writes the result
- Add another app, for example also send it to Google Sheets
- Combine it with other Pinecone and Slack steps into one automation
Under the hood
The code that runs this automation
import json
from clickruntime import on_trigger, credentials, http, state, notify, ai
APP_ID, COUNTRY = "1234567890", "us"
HOST, NS = "https://reviews-abc123.svc.aped-1234.pinecone.io", "app-reviews"
def search(text, k=5):
r = http.post(f"{HOST}/records/namespaces/{NS}/search", json={"query": {"inputs": {"text": text}, "top_k": k}}, headers={
"Api-Key": credentials.secret("PINECONE_API_KEY"), "X-Pinecone-API-Version": "2025-04"}).json()
return [h["fields"] for h in r["result"]["hits"]]
def upsert(records):
http.post(f"{HOST}/records/namespaces/{NS}/upsert", data="\n".join(json.dumps(r) for r in records[:96]), headers={
"Api-Key": credentials.secret("PINECONE_API_KEY"), "X-Pinecone-API-Version": "2025-04", "Content-Type": "application/x-ndjson"}).raise_for_status()
@on_trigger
def run(event):
feed = http.get(f"https://itunes.apple.com/{COUNTRY}/rss/customerreviews/id={APP_ID}/sortby=mostrecent/json").json()
seen = set(state.get("seen") or [])
new = [e for e in feed["feed"].get("entry", []) if "im:rating" in e and e["id"]["label"] not in seen]
if not new:
return {"new": 0}
texts = [f"{e['im:rating']['label']}★ {e['title']['label']}: {e['content']['label'][:500]}" for e in new]
upsert([{"_id": e["id"]["label"], "chunk_text": t} for e, t in zip(new, texts)])
similar = {h["chunk_text"] for t in texts[:5] for h in search(t, 4)} - set(texts)
summary = ai.generate("Summarise today's app reviews as top complaints and top praise (short bullets). Say which "
f"complaints also appear in older reviews.\nTODAY:\n" + "\n".join(texts) + "\nOLDER SIMILAR:\n"
+ "\n".join(similar), max_output_tokens=500).text
notify.slack(f"*{len(new)} new App Store reviews*\n{summary}", channel="#product")
state.set("seen", sorted(seen | {e["id"]["label"] for e in new})[-3000:])
return {"new": len(new)}FAQ
Common questions
Which stores are covered?
What if there are no new reviews?
Can I search past reviews?
What permissions does it need?
Does it need AI?
How many runs does it use?
Can I change how it works?
Related
You might also like
Draft answers to new support tickets and share them in Slack
When a support ticket arrives, a draft answer based on your knowledge base is posted in Slack for the team to review.
See how it worksGet a daily news digest in Slack
Each morning your team gets a short summary of what's new on the sites and blogs you follow.
See how it worksFollow your stocks and crypto in Slack
During market hours you get a short update on the tickers you care about, with a heads-up on big moves.
See how it worksKeep exploring
Set up “Summarise new App Store reviews for your product team in Slack” from your assistant
Copy the prompt above, or connect your assistant first. Free plan, no credit card.