How to Export Steam Reviews to CSV or Excel (2026)
Steam reviews can be exported with Steam's official Web API, IUserReviewsService/GetAppReviews, which returns up to 100 reviews per request with a cursor for the next page and needs no key, so a short script can write every review of a game to CSV; without code, the InsightSocial Chrome extension reads the reviews from the game's store page and exports the 10,000 newest in every language, with playtime, helpful votes and developer replies, to CSV, Excel, JSON or Google Sheets.
TL;DR
| Method | Cost | Limit | Skill |
|---|---|---|---|
Steam Web API (GetAppReviews) + script | Free, no key needed | 100 reviews per request, cursor paging | Python |
| Chrome extension (InsightSocial) | Free up to 500 rows/month | 10,000 newest reviews per run | None |
| Cloud scrapers (Apify actors) | Per 1,000 reviews | Varies | Low |
Can you export Steam reviews directly?
There is no download button on the store page, but Steam is unusually open: it documents a Web API method for reading any game's reviews, GetAppReviews in the IUserReviewsService interface (partner.steamgames.com/doc/webapi/IUserReviewsService). A key is optional; a publisher key associated with the game only raises the rate limit. It replaces the older store.steampowered.com/appreviews/<appid>?json=1 endpoint, which Steam switches off on October 22, 2026, and takes the same filters: sort order, languages, review type, purchase type, a date range and a cursor.
That makes Steam the easiest of the big review sites to export, as long as you are comfortable running a script.
What a Steam review export includes
- Recommended or not (Steam has thumbs up and down, not stars)
- Review text, in the language it was written in
- Language
- Date posted and date last updated
- Helpful and funny votes
- Playtime: total, at the time of the review, and in the last two weeks
- Steam purchase flag, received for free, written during Early Access
- Reviewer Steam name and profile link, and how many games and reviews they have
- The developer's reply, when there is one
- The game's name, review score description, total, positive and negative counts
Playtime at review is the field most other review sites cannot give you: a negative review after 2 hours reads differently from one after 200.
What the rows look like
Illustrative rows: the shape of an export, with made-up names and text, not real reviewers.
| Recommended | Language | Posted | Playtime at review (h) | Helpful | Funny | Text |
|---|---|---|---|---|---|---|
| Yes | english | 2026-10-12 | 42 | 18 | 2 | The new patch fixed the stutter. Best co-op in years. |
| No | schinese | 2026-10-11 | 3 | 5 | 0 | (review text in Chinese) |
| No | english | 2026-10-10 | 210 | 64 | 1 | Loved it for 200 hours, but the latest update broke my saves. |
| Yes | russian | 2026-10-09 | 15 | 0 | 0 | (review text in Russian) |
A thumbs down after 210 hours of play says more than one after 3: it usually points at a specific change.
Method 1: Steam's GetAppReviews API with Python
Find the game's app ID in its store URL (store.steampowered.com/app/<appid>/...). Then:
import csv, json, time, requests
APP_ID = 620 # the number in the store URL
URL = "https://api.steampowered.com/IUserReviewsService/GetAppReviews/v1/"
rows, cursor, seen = [], "*", set()
while cursor not in seen:
seen.add(cursor)
query = {"appid": APP_ID, "filter": 1, # 1 = most recently created
"languages": ["all"], "purchase_type": 1, # 1 = all purchases, not only Steam
"num_per_page": 100, "cursor": cursor}
resp = requests.get(URL, params={"input_json": json.dumps(query)}, timeout=30)
resp.raise_for_status()
data = resp.json()["response"]
reviews = data.get("reviews", [])
if not reviews:
break
for r in reviews:
rows.append({
"id": r["recommendationid"],
"recommended": r["voted_up"],
"language": r["language"],
"created": r["timestamp_created"],
"playtime_at_review_min": r["author"].get("playtime_at_review"),
"votes_up": r["votes_up"],
"text": r["review"],
})
cursor = data.get("cursor", cursor)
time.sleep(1) # be gentle; large games have thousands of pages
with open(f"steam_{APP_ID}.csv", "w", newline="", encoding="utf-8-sig") as f:
writer = csv.DictWriter(f, fieldnames=list(rows[0].keys()))
writer.writeheader()
writer.writerows(rows)
print(len(rows), "reviews")
Notes:
- Parameters go in one
input_jsonparameter, and the sort and filters are numbers:filter0 is most helpful, 1 most recent, 2 most recently updated, 3 funniest. Use 1 or 2 to page through every review; the helpful sort only looks back over a window of days. languages: ["all"]gets every language; an empty list means English only.purchase_typedefaults to Steam purchases only; 1 includes reviews from keys bought elsewhere.- Off-topic "review bomb" reviews are filtered out by default. Add
"filter_offtopic_activity": falseto include them. - Pass the cursor back exactly as Steam returns it; the loop stops when a cursor repeats or a page comes back empty.
encoding="utf-8-sig"makes Excel read Chinese, Russian and accented text correctly.
We ran this script against a real game while writing this guide (October 2026): it returned 100 reviews per page across languages.
Method 2: A Chrome extension, no code
With InsightSocial's Steam Review Scraper:
- Install InsightSocial and sign in with Google.
- Open the game's store page, any
store.steampowered.com/app/…address. You do not need to pass the age gate or sign in to Steam. - Allow Steam once when Chrome asks.
- Click Scrape. The extension pages through Steam's public reviews feed, newest first, in every language and every purchase type, with a running count, and the run keeps going in a background tab.
- Export to CSV, Excel, JSON or Google Sheets.
How many: in our own runs in October 2026, a game with 78 reviews returned all 78 plus the developer's reply in 10 to 17 seconds. For the most-reviewed games a run stops at the 10,000 newest reviews (it also stops after 4 minutes, or earlier if Steam starts rate limiting). Newest first means a run that stops at the cap still covers the latest patches completely, which is usually the period you care about.
What it costs: scraping is free; exporting is one credit per row. Free includes 500 a month; Pro $9.99 a month includes 10,000; Studio $49 includes 150,000. Re-exporting a row you already exported is free.
Method 3: Cloud scrapers
The Apify Store lists several third-party Steam review actors that take a list of app IDs and can run on Apify's schedules, billed per 1,000 reviews (the most used, Automation Lab's, cost $0.575 per 1,000 reviews on Apify's free plan when we checked in October 2026). They make sense if you track many games over time; for one game, Steam's own API is free.
Large games: getting past 10,000 reviews
For a game with 300,000 reviews, the extension's 10,000 newest is a sample of recent sentiment, not the whole history. If you need everything, use the script and let it run, pacing requests. Narrowing helps too: one language at a time, or a window of time with date_range_start and date_range_end (Unix timestamps; both must be set), for example the week after a patch.
Troubleshooting
The script stops after a few pages. You are being rate limited. Sleep between requests and resume from the last cursor.
Counts do not match the store page. The store page's totals follow the filters shown on it, such as purchase type and off-topic review activity. The API defaults to Steam purchases only and filters out off-topic reviews; set purchase_type to 1 and filter_offtopic_activity to false to include everything.
Excel shows garbled text. Save the CSV as UTF-8 with BOM, or export .xlsx.
Steam does not load. Steam is blocked by some networks and countries. Try another connection.
FAQ
Is there an official Steam reviews API?
Yes. IUserReviewsService/GetAppReviews in the Steam Web API returns any game's reviews as JSON, up to 100 per request with a cursor; a key is optional. It replaces the older appreviews endpoint, which Steam switches off on October 22, 2026.
How do I export Steam reviews without coding? Use a browser extension. InsightSocial exports the 10,000 newest reviews of the game you open, free up to 500 rows a month.
Can I export Steam reviews in all languages?
Yes. Both the API (languages: ["all"]) and InsightSocial return reviews in the language they were written in. Nothing is translated.
Does the export include playtime? Yes: playtime at the time of the review, total playtime and the last two weeks, in minutes.
Are developer replies included? Yes. InsightSocial puts each developer reply in its own row under the review it answers.
Can I export reviews for several games at once? Not in one InsightSocial run. Loop over app IDs in the script, or use a cloud scraper.
Related: how to download all comments from a Hacker News thread, best free review scraper Chrome extensions, and all review and comment scrapers.