Add records from a CSV file
Fill in the CSV template to bulk-add multiple visits and dishes to Private Bite at once.
1. Save the template
Download the official CSV template and open it in Excel or a spreadsheet app. Do not change the header row; row 2 contains a sample record.
2. Fill it in with Excel or Google Sheets
Each row represents one dish. If you are recording multiple dishes from the same meal, see "Using visit groups" below. Do not change the header row's column names or order.
3. Save as CSV
When you are done, save the file as CSV (comma-separated). Choose UTF-8 encoding (a UTF-8 BOM is fine) and keep the comma as the delimiter.
4. Review before importing into Private Bite
In Private Bite, open Settings and choose "Add records from CSV," then select your file. On the confirmation screen, review any rows that need attention, possible duplicates, and whether to convert currencies before completing the import.
When you complete the import, the reviewed rows are added to your existing records. It does not update, replace, or merge any existing records or dishes.
Columns and rules
Only three columns are required: visit date, shop name, and dish name. Even when rows share a visit group, each row still needs its own value for these three columns. Every other column is optional and can be left blank.
| Column | Required | Description | Example |
|---|---|---|---|
| Visit Group | Optional | A shared value used to group multiple dishes from the same meal. If blank, each row is treated as its own separate visit. | 001 |
| Visit Date | Required | The date you actually visited. Use year-month-day order in YYYY-MM-DD or YYYY/M/D format, for example 2026-07-16 or 2026/7/16. The date must be a real calendar date. | 2026-07-16 |
| Shop Name | Required | The name of the restaurant. | Unagi no Mitani |
| Dish Name | Required | The name of the dish you ordered. | Hitsumabushi Set |
| Visit Type | Optional | Dine-in, Takeout, or Delivery (English or Japanese; case-insensitive). | Dine-in |
| City | Optional | The city you visited. | Okayama |
| Country Code | Optional | An ISO 3166-1 alpha-2 two-letter code. Lowercase is automatically uppercased. | JP |
| Shop Address | Optional | As much of the address as you know. | Okayama, Okayama Pref... |
| Price | Optional | The amount you paid, as a number. | 4200 |
| Currency Code | Optional | An ISO 4217 three-letter code. Only the app's 20 supported currencies are accepted. If a price is entered and this is blank, the app's default currency is used. | JPY |
| Taste Rating | Optional | 1.0 to 5.0 in steps of 0.1. | 4.8 |
| Category | Optional | The dish's category. Matches an existing category name if one exists. | Eel |
| Cost Rating | Optional | A whole number from 1 to 5. | 4 |
| Atmosphere Rating | Optional | A whole number from 1 to 5. | 5 |
| Service Rating | Optional | A whole number from 1 to 5. | 4 |
| Memo | Optional | Free-form text. Wrap it in double quotes if it contains a comma. | Crispy skin |
| Want to Revisit | Optional | Yes/No, true/false, or 1/0 (Japanese "はい"/"いいえ" is also accepted). | TRUE |
The taste rating uses 1.0 to 5.0 in steps of 0.1. The cost, atmosphere, and service ratings are whole numbers from 1 to 5. The visit date must use year-month-day order in YYYY-MM-DD or YYYY/M/D format, for example 2026-07-16 or 2026/7/16. The date must be a real calendar date.
Using visit groups
Use "Visit Group" only when recording multiple dishes from the same meal. Rows that share the same value (for example, 001) are grouped into a single visit; only the dish name, price, taste rating, and category are treated as per-dish values. Every other value (visit date, shop name, visit type, city, country code, shop address, currency code, the three ratings, memo, and revisit flag) must match across all rows in the same visit group. If they don't match, the entire visit group is excluded from the import.
If you leave "Visit Group" blank, each row is imported as its own separate visit.
Duplicates, restaurants, categories, and currency
Rows with a date, restaurant name, and dish name close to an existing record are treated as possible duplicates and are excluded by default. You can review them on the confirmation screen and choose to include them if needed.
A restaurant name that matches an existing one is treated as the same restaurant; a different spelling creates a new restaurant. A category name that matches an existing category is linked to it; unmatched category names can be resolved on the confirmation screen.
If you enter a price and leave the currency code blank, the app's default currency is used. The country code is never used to guess the currency. A currency code the app doesn't support is flagged as an error on the confirmation screen.
Common errors and fixes
- Wrong visit date format: Use year-month-day order in YYYY-MM-DD or YYYY/M/D format, for example 2026-07-16 or 2026/7/16. The date must be a real calendar date.
- Unsupported currency code: Use one of the app's 20 supported currencies, or leave it blank.
- Mismatched values within a visit group: Every value except the dish name, price, taste rating, and category must match across rows in the same visit group.
- Missing required values: Every row needs a visit date, shop name, and dish name.
- File too large or too many rows: Split the file so it stays under 10MB and 10,000 data rows.
- Garbled characters: Save the file with UTF-8 encoding (a UTF-8 BOM is fine).
Privacy
The CSV file is parsed entirely on your device and is not sent anywhere. Only if you choose currency conversion during import are the visit date and currency codes sent to the Frankfurter API to look up an exchange rate. Restaurant names, dish names, notes, and the price itself are never sent. See the full Privacy Policy for details.
If you have questions about importing, contact privatebite.support@icloud.com.