Exporting to Google Sheets with Scrapy#
To configure a Scrapy project or spider to export scraped data to Google Sheets:
You need Python 3.8 or higher.
If you are using Scrapy Cloud, make sure you are using stack
scrapy:1.7-py38or higher. Using the latest stack (scrapy:2.13-20250721) is generally recommended.Install scrapy-feedexporter-google-sheets:
pip install git+https://github.com/scrapy-plugins/scrapy-feedexporter-google-sheets
If you are using Scrapy Cloud, remember to add the following line to your
requirements.txtfile:scrapy_google_sheets_exporter @ git+https://github.com/scrapy-plugins/scrapy-feedexporter-google-sheets
In your
settings.pyfile, defineFEED_STORAGESas follows:settings.py#FEED_STORAGES = { "gsheets": "scrapy_google_sheets_exporter.gsheets_exporter.GoogleSheetsFeedStorage", }
If the setting already exists in your
settings.pyfile, modify the existing setting to add the key-value pair above, instead of re-defining the setting.Add a FEEDS setting to your project or spider, if not added yet.
The value of
FEEDSmust be a JSON object ({}).If you have
FEEDSalready defined with key-value pairs, you can keep those if you want —FEEDSsupports exporting data to multiple file storage service locations.To add
FEEDSto a project, define it in your Scrapy Cloud project settings or add it to yoursettings.pyfile:settings.py#FEEDS = {}
To add
FEEDSto a spider, define it in your Scrapy Cloud spider-specific settings (open a spider in Scrapy Cloud and select the Settings tab) or add it to your spider code with the update_settings method or the custom_settings class variable:spiders/myspider.py#class MySpider: custom_settings = { "FEEDS": {}, }
Add the following key-value pair to
FEEDS:{ "gsheets://docs.google.com/spreadsheets/d/<SPREADSHEET ID>/edit#gid=<WORKSHEET ID>": { "format": "csv" } }
Where:
You can find the right values for
<SPREADSHEET ID>and<WORKSHEET ID>in the URL when you are looking at the target worksheet, e.g:https://docs.google.com/spreadsheets/d/1fWJgq5yuOdeN3YnkBZiTD0VhB1MLzBNomz0s9YwBREo/edit#gid=1261678709.Note
If
/edit#gid=<WORKSHEET ID>is omitted, the first worksheet is used.
To append to an existing worksheet, you should also:
Use the
fieldsfeed option of FEEDS or the FEED_EXPORT_FIELDS Scrapy setting to explicitly indicate all fields to export, in the expected order.Set
item_export_kwargs.include_headers_linetoFalse, to not write the header row.
For example:
{ "gsheets://docs.google.com/spreadsheets/d/<SPREADSHEET ID>/edit#gid=<WORKSHEET ID>": { "format": "csv", "fields": ["field1", "field2"], "item_export_kwargs": {"include_headers_line": False} } }
Define the
GOOGLE_CREDENTIALSsetting as a Python dictionary containing your service account credentials in JSON format:settings.py#GOOGLE_CREDENTIALS = { "type": "service_account", "project_id": "myproject", "private_key_id": "…", "private_key": "…", "client_email": "…@email.iam.gserviceaccount.com", "client_id": "…", "auth_uri": "…", "token_uri": "…", "auth_provider_x509_cert_url": "…", "client_x509_cert_url": "…" }
Make sure you give your service account write access on the target spreadsheet. You can do that by sharing the spreadsheet with the email of the service account (
client_emailin the JSON above).
Running your spider now, locally or on Scrapy Cloud, will export your scraped data to the configured Google Sheets worksheet.