• 3 tables
  • 90,277 rows
  • 7 formats
  • synthetic data

Restaurant Review Dataset

It includes details on restaurants, users, and their reviews, suitable for text analysis and ML practitioners. A free sample is available, with the full download costing credits.

  • last updated 12 Oct 2026
  • by GoMask
  • Data collected between 2018-01-01 and 2023-12-31
  • Includes restaurant details, user information, and review text
  • Restaurant ratings range from 1 to 5 stars
  • Supports analysis of cuisine types, city, and price range

At a glance

  • 3tables
  • 90,277rows
  • 16columns
  • Jan 2018 – Dec 2023date range

The 3 tables

preview and data dictionary per table

Restaurants restaurants · table · 4,500 rows

Information about individual restaurant establishments.

Preview

First 10 of 4,500 rows of the Restaurants table
restaurant_iduuidrestaurant_namestringcuisine_typestringcitystringstatestringrating_avgdecimalprice_rangestring
ae5df9ab-5753-44f6-b8ce-b35a2161acbfGolden Dragon PalaceChineseLos AngelesCA3.97$$
4ff1a955-ee03-466b-a813-6205cd77982eSpice Route BistroIndianNew YorkNY4.36$$
01054c6f-bf86-47b2-8a1e-4aa9ef97307dVesuvio TrattoriaItalianNew YorkNY3.88$$
2282d611-3d4e-4953-8c93-ebddc9d679a3Liberty GrillAmericanPhiladelphiaPA3.68$$
05a2e233-f500-458b-a04c-0ad367069de5Mumbai Masala HouseIndianLos AngelesCA3.57$$
60fd08c2-c7ff-4d4a-952a-671c5f0ee0beThe Daily Grind CafeCafeHoustonTX3.92$$
3363177a-e7bc-4b57-99b6-6829797681ccOcean's Catch SeafoodSeafoodPhiladelphiaPA4.51$$
42104c48-07dc-4d84-bc0c-ca40f6b27655Lone Star DinerAmericanHoustonTX3.91$$
532dd713-3317-43d5-9543-a8b1c024936aEl Fuego CantinaMexicanDallasTX3.9$$
6e8da6ae-03c1-4ef1-8321-cf23750d3e29Bella Napoli PizzeriaItalianSan JoseCA4.07$$
10 of 4,500 rows · 7 columns

Data dictionary

Data dictionary for the Restaurants table
columntypedescriptionexamplenull %
restaurant_iduuidUnique identifier for the restaurant establishment.uniqueae5df9ab-5753-44f6-b8ce-b35a2161acbf0%
restaurant_namestringTrading name of the restaurant or dining venue.Golden Dragon Palace0%
cuisine_typestringPrimary culinary category served by the establishment.Chinese0%
citystringMetropolitan city where the restaurant is located.Los Angeles0%
statestringTwo-letter US state code matching the restaurant city.CA0%
rating_avgdecimalOverall average user rating on a 2.00 to 5.00 scale.3.970%
price_rangestringPrice tier indicator indicating affordability level.$$0%

Users users · dimension table · 5,000 rows

Details about the users who submitted reviews.

Preview

First 10 of 5,000 rows of the Users table
user_iduuidusernamestringjoin_datedate
26e94a43-e04d-473a-b096-199951b8e9bdArthur_Miller2018-03-14
ed3f6e73-8b82-4ecc-9844-13529298046fBrenda_Walker2020-08-20
589b16b2-8714-4bd0-be95-1083ee94401bClarence_Scott2019-11-03
b4dbaaf8-1f0a-4afd-9ee8-0cc4ac16bfc8Diana_Nelson2020-06-27
73b11917-9dd8-4204-98ff-945d1c1d89dcEdward_Carter2018-08-05
1081f179-fa8f-4650-a1e0-8877ef93eebbFiona_Mitchell2021-08-05
3cee59bc-0bca-4e32-9211-699cde0c09fdGeorge_Adams2020-03-02
76fcb947-e107-4128-a78f-cb754fb2fc17Helen_Baker2018-04-17
e1bb1906-d700-46db-88c9-41df58848298Isaac_Campbell2021-06-01
58cda873-5a7b-4457-a5eb-3062a31071cfJoyce_Evans2019-05-27
10 of 5,000 rows · 3 columns

Data dictionary

Data dictionary for the Users table
columntypedescriptionexamplenull %
user_iduuidPrimary key uniquely identifying each user reviewer account.unique26e94a43-e04d-473a-b096-199951b8e9bd0%
usernamestringUnique handle or screen name of the restaurant reviewer.uniqueArthur_Miller0%
join_datedateThe date when the user created their account on the platform.2018-03-140%

Reviews reviews · fact table · 80,777 rows

Individual customer reviews for restaurants.

Preview

First 10 of 80,777 rows of the Reviews table
review_iduuidratingintegerreview_textstringreview_datedaterestaurant_iduuiduser_iduuid
bd58d897-455e-42c8-8bbb-b6dad2409e894The outdoor seating was perfect on a warm evening. Enjoyed the refreshing cocktails.2022-04-02bf1f5153-3688-4427-b263-d2734dd1048204e75bb4-5227-4d5c-9c35-340f4e368875
8e2da9db-1c6c-4ffb-9660-d776852185694The staff seemed a little disorganized, but they were trying their best. The salmon was flaky and well-cooked.2021-10-29f8b55a8b-639b-47cf-aebd-72fad1dc2f58972947db-efe9-4e6c-b28c-eb99ea723d75
3ac02705-6414-4e04-be4d-a51d0ae137184Loved the ambiance, it felt very authentic. The tacos were delicious and had just the right amount of spice.2023-07-23479b3826-9269-4a8e-a78e-b70e02a815e701165ed9-ddf1-47c6-b02c-f953d7fbb197
7f212166-e51b-4187-9b4b-1b7d1a1bb4643An experience that was neither good nor bad. Just sort of there.2023-01-104088c9ce-12f6-49d0-aae6-339bcaff032074350eca-f3a0-4201-a7be-457fddc3ac14
8c1b73e4-8c20-4893-9ed7-7ab8f7549eab4The service was exceptional from start to finish. Very accommodating.2021-12-015fda6bf5-8b32-4b12-8a7f-88f87769f9ed64ad73b9-45a5-4524-8c3a-c319acfad676
73ca17c6-a75c-410a-ac84-54c1ed4669cf5The vegetarian options were surprisingly creative and delicious. I was very impressed with the quality and variety.2022-01-23fdcccff2-5da3-44c9-93d7-c47e820d16d02eeeab3c-4d39-4025-9123-80441bd4243d
4ff818ed-85c5-4790-906c-1d4c67d2334a3The sushi was not very fresh. I would not recommend it.2022-12-110d5c6b99-7c4c-48d5-ac71-fb5fbc5f4abd98715fa7-ebff-4cce-90df-ca814e37ad44
19c9540b-bb50-43b5-b885-59bec11a19033A solid, if not spectacular, dining experience. The server was polite.2023-04-208b3103c3-31af-49a4-9b62-c7da5ec1b147a7b89b6d-f096-4632-9bcf-758e05f2b8bd
fe4fd931-0d0e-43d4-91b1-d29a7eba757a5I'm so glad we found this place. The food was exceptional, and the prices were very reasonable. We'll definitely be regulars.2021-11-298087ce46-f0fe-4fad-bad0-0eff77f5d54d70cb21c8-8676-4520-8a95-ef99aa91a8d6
32e6d81e-50c9-4227-8071-6f24bbbbe4b94The wine selection was extensive. Really enjoyed the recommendation from our server.2023-03-28a578f1da-4c30-4f90-a394-31a12aa0138947af8008-a698-476a-91f8-77809c9dda0c
10 of 80,777 rows · 6 columns

Data dictionary

Data dictionary for the Reviews table
columntypedescriptionexamplenull %
review_iduuidUnique identifier for the review.bd58d897-455e-42c8-8bbb-b6dad2409e890%
ratingintegerNumerical star rating awarded by the customer (1 to 5).40%
review_textstringDetailed text feedback written by the customer (10 to 300 words).The outdoor seating was perfect on a warm evening. Enjoyed the refreshing cockta0%
review_datedateDate when the review was posted by the user.2022-04-020%
restaurant_iduuidForeign key to restaurants.restaurant_id.bf1f5153-3688-4427-b263-d2734dd104820%
user_iduuidForeign key to users.user_id.04e75bb4-5227-4d5c-9c35-340f4e3688750%

How the tables join

  • reviews.restaurant_id references restaurants.restaurant_idmany to one: each Reviews row points to one Restaurants row
  • reviews.user_id references users.user_idmany to one: each Reviews row points to one Users row

Questions to answer with it

  1. What is the average rating for each restaurant?

    Join restaurants and reviews tables on restaurant_id and calculate the average rating.

    tables: restaurants, reviews

  2. Can sentiment analysis be performed on the review text?

    The 'review_text' column contains -form text suitable for sentiment analysis.

    tables: reviews

  3. Are there any correlations between restaurant cuisine type and review sentiment?

    Join restaurants and reviews tables, then analyze review sentiment in relation to cuisine_type.

    tables: restaurants, reviews

  4. How many reviews did each user write?

    Join users and reviews tables on user_id and count the number of reviews per user.

    tables: users, reviews

Starter SQL

run against this data before publishing

Table names match the SQLite file and the SQL script.

Average rating per restaurant

sql
SELECT r.restaurant_name, AVG(rv.rating) AS average_rating FROM restaurants r JOIN reviews rv ON r.restaurant_id = rv.restaurant_id GROUP BY r.restaurant_name ORDER BY average_rating DESC LIMIT 20;

Top 5 most reviewed restaurants

sql
SELECT r.restaurant_name, COUNT(rv.review_id) AS review_count FROM restaurants r JOIN reviews rv ON r.restaurant_id = rv.restaurant_id GROUP BY r.restaurant_name ORDER BY review_count DESC LIMIT 5;

Reviews from users who joined in 2018

sql
SELECT rv.review_text, rv.rating FROM reviews rv JOIN users u ON rv.user_id = u.user_id WHERE u.join_date BETWEEN '2018-01-01' AND '2018-12-31' LIMIT 20;

Average rating by city

sql
SELECT city, AVG(rating_avg) AS avg_restaurant_rating FROM restaurants GROUP BY city ORDER BY avg_restaurant_rating DESC LIMIT 20;

Load it with pandas

python
import pandas as pd

# Unzip the CSV download first: one file per table
restaurants = pd.read_csv("restaurants.csv")
users = pd.read_csv("users.csv")
reviews = pd.read_csv("reviews.csv")

# Join reviews to restaurants
df = reviews.merge(restaurants, left_on="restaurant_id", right_on="restaurant_id", how="left", suffixes=("", "_restaurants"))
print(df.groupby("cuisine_type").size().sort_values(ascending=False))

Using it in your tool

Excel
Load each table into a separate sheet. Use XLOOKUP or Power Query to join tables based on IDs. Create a PivotTable on the reviews sheet to analyze ratings by cuisine type.
Power BI
Set up a star schema with 'reviews' as the fact table and 'restaurants' and 'users' as dimension tables. Create relationships using the respective ID columns. Implement DAX measures for average rating and review count.
SQL
Load the SQLite or SQL dump into your preferred database. Use foreign keys (restaurant_id, user_id) to join tables for analysis. Example join path: reviews.restaurant_id -> restaurants.restaurant_id.
Python
Load CSV files into pandas DataFrames. Use pandas for data manipulation, analysis, and visualization. Libraries like NLTK or spaCy can be used for text analysis on the review_text column.

Formats available

  • CSV (zip)One CSV file per table, zipped
  • Excel workbookOne worksheet per table
  • SQLite databaseA ready-to-query database file with every table
  • Parquet (zip)One Parquet file per table, zipped
  • SQL scriptCREATE TABLE with primary and foreign keys, then INSERTs
  • CSVA single CSV file
  • JSONA single JSON file

How this data was generated

Synthetic data. Every row was generated: no real people, customers or companies are in this dataset.

Synthetic data generated by GoMask DataFactory from a relational blueprint: keys, links and rules are enforced in code, text columns are filled by a language model. No real people, companies or transactions.

  • Data generated using GoMask DataFactory.
  • Synthetic data created to simulate real-world review patterns.
  • Includes realistic distributions for ratings, text length, and user activity.
  • Checked by an automated quality gate: unique keys, no orphan foreign keys, required columns filled, declared rules and date ranges (realism score 100).

Limitations

  • The dataset is synthetic and does not represent actual user experiences or businesses.
  • Review text length is capped between 10 and 300 words.
  • Limited number of cuisine types (10) and cities (10) represented.
  • Distributions and correlations are modelled, not measured from real records.

blueprint · restaurant-review-dataset

Scale this dataset

Same tables. As many rows as you need.

Open the blueprint behind these 3 tables in Data Factory: keep the relationships, change a column, and generate it at the size you need.

  • 200,000 rows
  • 1,000,000 rows
Scale this dataset in Data Factory
Tables
restaurants, users, reviews
Licence
yours to use, including commercially
API slug
restaurant-review-dataset

What should your data show?

Preview 20 rows free
No signup. No card.