Google Sheets sync
Set up two-way sync between one tab of a Google Sheets spreadsheet and Notion: paste the link, pick a tab, map columns, and learn what the hidden 2sync ID column does
One tab of a Google Sheets spreadsheet syncs with one Notion database through 2sync. Add or edit a row in the sheet and the change reaches Notion within minutes; edit the page in Notion and the cells follow. You pick the tab by pasting the spreadsheet link, map each column to a Notion property, and choose the sync direction per column.
How do I get started?
Connect Google Sheets
- Go to the Google Sheets & Notion Sync onboarding
- Click Connect Google Sheets
- Sign in with your Google account
- Authorize 2sync to see, edit, create, and delete your Google Sheets spreadsheets
2sync asks for spreadsheet access only, not Google Drive access. It never lists your files: the only spreadsheets it opens are the ones whose link you paste in the next step.
Add your spreadsheet
Right after connecting, the tab list is empty. That is expected: 2sync does not know which spreadsheet you want yet.
- Open the spreadsheet in Google Sheets and switch to the tab you want to sync
- Copy the link from your browser's address bar
- Paste it into the Google Sheets link field and click Add spreadsheet
2sync lists every tab in that spreadsheet. The tab that was open when you copied the link is already selected. Click another tab to select it instead; only one tab can be selected, so the previous one is deselected.
One tab per automation. To sync a second tab of the same spreadsheet, create another automation and paste the same link again.
Hidden tabs appear with a Hidden chip and can still be synced. If you add or rename tabs later, click Refresh tabs. To forget a spreadsheet, click Remove this spreadsheet; automations that used one of its tabs stop syncing until you add it again.
Connect Notion
- Click Connect with Notion and allow access
- Make sure your database is connected to 2sync: click (•••) > Add connections > 2sync on the database page
- Copy the database link from (•••) > Copy link
- Paste the link when prompted
Name your Notion properties after your column headers. 2sync maps a column to the property with the same name automatically, so a sheet with the headers Name, Status, Due, and Amount lines up with a database that has those four properties in one click.
Databases inside a Wiki page are not supported due to Notion API limitations.
How does 2sync read my sheet?
The header row
The first row of the tab is the header row, and each header becomes the name of a field. If you froze rows at the top of the tab, the last frozen row is the header, so notes or a title above a frozen header are ignored.
Two columns with the same header are told apart by their column letter, and a column with an empty header is named after its letter (for example, Column C).
Rows
Every row below the header that has a value in the column mapped to the Notion title is a record. A row without a title is skipped until you fill it in. New pages created in Notion are appended as new rows at the bottom of the tab.
One automation syncs up to 10,000 rows. Past that, the automation stops with an error; move the older rows to another tab to bring the count down.
The 2sync ID column
On the first sync, 2sync adds a column named 2sync ID at the end of the tab. The column is hidden and protected, and every synced row gets an ID in it. That ID is what links the row to its Notion page, so you can sort the tab, insert rows, move columns, and rename headers without losing the link.
Leave the 2sync ID column alone. Clearing an ID makes 2sync treat the row as new, which creates a second Notion page for it. Deleting the whole column pauses the automation; the next Sync now recreates the column and relinks each row to its page by title, so rows whose title changed or is shared with another row come back as new pages.
If you copy a row inside the tab, the copy carries the same hidden ID and is ignored. Unhide the column, clear the ID cell of the copy, and it syncs as a new row.
The Notion Link column
Turn on Include Notion link in the sync settings and 2sync adds a visible, protected Notion Link column right after 2sync ID. Every synced row gets the URL of its Notion page, so you can jump from the sheet to the page in one click.
How do I map columns to Notion properties?
Field mapping controls how data moves between the tab and Notion. Each column appears as a field named after its header, with a property type suggested from the column's formatting. For every type and what it maps to, see Google Sheets fields.
Sync directions
- 2-way sync: changes in either app update the other
- 1-way to Notion: sheet changes update Notion, but not the other way
- 1-way to Google Sheets: Notion changes update the sheet, but not the other way
Formula columns are fixed to 1-way to Notion. Sync Status and Automation Name always go to Notion, and Trigger deletion always goes to Google Sheets. For a detailed comparison, see two-way vs one-way sync.
Adding fields
Click + Add Field in the field mapping section to map a column that was not matched automatically. Columns you add to the tab later show up after you click Refresh tabs in the connection panel.
Renaming and deleting columns
Renaming a header keeps the mapping, because 2sync identifies columns by an internal ID rather than by their text. Deleting a mapped column pauses the automation with an error that names the missing column. Undo the deletion, or remove the field from the mapping, and the sync resumes.
How do I choose which rows sync?
Filters for Google Sheets automations work on Notion properties. Add a condition on a Notion property to decide which pages sync to the sheet. There are no sheet-side conditions yet; to sync part of a tab, move those rows to their own tab.
- In the Filters section, choose All conditions or Any condition
- Click + Add Condition and pick a Notion property, an operator, and a value
- Save your automation
See the filters overview for operators per property type.
Map the Sync Status field to a Notion property to see which rows are Synced, Ignored, or Removed at a glance.
What happens when the same row changes in both places?
2sync compares each mapped column separately, using the value from the last sync as the reference.
- Different columns changed on each side: both edits are kept
- The same column changed on both sides between two syncs: the Notion value wins and is written back to the cell
A column set to one way is never written in the other direction, whatever changed. See conflict resolution for the general rules.
How does row deletion work?
By default, nothing is deleted on the other side:
- Delete a row in the sheet: its Notion page stays, with Sync Status set to Removed
- Delete or archive the Notion page: the row stays in the sheet
Clearing the cells of a row is never a deletion. As long as the hidden ID is there, the row is an update with empty values.
Turn on Allow row deletion under advanced sync settings to sync deletions both ways. A deleted row then archives its Notion page, and a deleted Notion page removes its row. The switch is off during onboarding and can be turned on from the automation page afterwards.
When a sync is about to delete a large share of the synced rows, 2sync pauses the automation and asks you to confirm. See safety limits for how to review the pending changes and resume.
Deleting rows from Notion
Map Trigger deletion on Google Sheets to a checkbox or status property. When the box is checked, 2sync deletes the matching row on the next sync, whether or not Allow row deletion is on.
Mapping this field deletes every row whose checkbox is already checked on the next sync. Make sure the property is empty before mapping it.
See delete behavior for the general rules.
Tips and best practices
Sync frequency
- Solo plan: syncs every 5 minutes
- Premium plan: syncs every 3 minutes
- Pro plan: syncs every 2 minutes
Click Sync now on your automation to trigger an immediate sync. A run that finds nothing changed on either side exits early and writes no activity log entry.
Time zone
Dates and times use the time zone of the spreadsheet, set under File > Settings in Google Sheets. Set it to your own time zone before the first sync so date-time cells and Notion dates agree.
Keep the sheet tidy
- Keep the header row as the first row, or freeze it
- Give every synced row a title
- Use Data > Data validation to add dropdown lists on columns you map to Notion selects
- Insert real checkboxes (Insert > Checkbox) on columns you map to Notion checkboxes
Two automations on one tab
Two automations can sync the same tab into different databases. Leave Ignore linked on so rows already synced by one automation are skipped by the other, or turn it off to sync every row into both.
What should I do next?
- See how each column type maps to Notion
- Configure sync direction per column
- Understand what happens on deletion
Related
- Google Sheets fields for the column type reference
- Sync direction and field mapping for controlling data flow per field
- Two-way vs one-way sync for understanding sync direction options
- Conflict resolution for how 2sync handles simultaneous edits
- Delete behavior for understanding what happens when rows are deleted
- Safety limits for the automatic pause on large deletions
- Default values for filling Notion-only properties on new pages
- Notion property types for choosing the right property for each column
FAQ
Can I sync more than one tab?
One automation syncs one tab. Create a second automation, paste the same spreadsheet link, and pick the other tab. Both automations can point at the same Notion database or at different ones.
Why is the tab list empty after I connected?
2sync only sees the spreadsheets whose link you paste. Copy the link from your browser's address bar, paste it into the Google Sheets link field, and click Add spreadsheet. The tabs appear right away.
Can I sync a spreadsheet someone shared with me?
Yes, as long as you can edit it. 2sync needs edit access to add the hidden 2sync ID column. With view-only access, rows can be read but the first sync stops with a permission error.
What does the 2sync ID column do?
It stores the ID that links each row to its Notion page. It is hidden and protected. Do not clear or delete it; if it goes missing, the next Sync now recreates it and relinks rows by title.
Does 2sync overwrite my formulas?
No. Columns that contain formulas are read-only on the sheet side and only sync to Notion. Values typed in Notion that start with an equals sign are written as plain text, never as a formula.
What happens if I rename a header?
Nothing breaks. 2sync identifies columns by an internal ID, so the mapping keeps working and the field shows the new name after a refresh.
Which time zone do dates use?
The spreadsheet's time zone, set under File > Settings in Google Sheets. Date-time cells are converted with that zone when they reach Notion.
Is the sync instant?
No. 2sync checks for changes on a schedule based on your plan, every 2 to 5 minutes. Click Sync now to trigger an immediate sync.