{"id":13807391,"url":"https://github.com/fulldecent/google-sheets-etl","last_synced_at":"2025-09-26T12:31:29.113Z","repository":{"id":37548088,"uuid":"212629567","full_name":"fulldecent/google-sheets-etl","owner":"fulldecent","description":"Live import all your Google Sheets to your data warehouse","archived":false,"fork":false,"pushed_at":"2024-09-25T15:59:11.000Z","size":2374,"stargazers_count":18,"open_issues_count":3,"forks_count":1,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-01-14T23:02:24.990Z","etag":null,"topics":["data-vault","data-warehouse","etl"],"latest_commit_sha":null,"homepage":"","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/fulldecent.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"github":["fulldecent"],"custom":["https://www.paypal.me/fulldecent","https://amazon.com/hz/wishlist/ls/EE78A23EEGQB"]}},"created_at":"2019-10-03T16:44:02.000Z","updated_at":"2024-09-25T15:59:14.000Z","dependencies_parsed_at":"2024-08-04T01:07:29.269Z","dependency_job_id":"40ff0456-2a54-4763-8a73-1303ab17eb46","html_url":"https://github.com/fulldecent/google-sheets-etl","commit_stats":{"total_commits":72,"total_committers":2,"mean_commits":36.0,"dds":0.125,"last_synced_commit":"8ba8e96752194302c70583afd355f9e5312f07bb"},"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fulldecent%2Fgoogle-sheets-etl","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fulldecent%2Fgoogle-sheets-etl/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fulldecent%2Fgoogle-sheets-etl/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fulldecent%2Fgoogle-sheets-etl/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/fulldecent","download_url":"https://codeload.github.com/fulldecent/google-sheets-etl/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":234309722,"owners_count":18811949,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["data-vault","data-warehouse","etl"],"created_at":"2024-08-04T01:01:25.005Z","updated_at":"2025-09-26T12:31:23.761Z","avatar_url":"https://github.com/fulldecent.png","language":"PHP","funding_links":["https://github.com/sponsors/fulldecent","https://www.paypal.me/fulldecent","https://amazon.com/hz/wishlist/ls/EE78A23EEGQB"],"categories":["Data Ingestion"],"sub_categories":[],"readme":"[![PHP Composer](https://github.com/fulldecent/google-sheets-etl/actions/workflows/php.yml/badge.svg)](https://github.com/fulldecent/google-sheets-etl/actions/workflows/php.yml)\n\n# Google Sheets ETL\n\nImport all your Google Sheets to your data warehouse, including periodic delta loads\n\n\u003cimg width=\"1993\" alt=\"Screen Shot 2019-11-07 at 15 44 33\" src=\"https://user-images.githubusercontent.com/382183/68426182-91f86d00-0175-11ea-8915-3ca3700488bd.png\"\u003e\n\n\nSee `example.php` how to use this library.\n\n## Install\n\nVia Composer\n\n```sh\ncomposer require fulldecent/google-sheets-etl:dev-main\n```\n\nNext, create a Google Service Account. This requires 20 steps so we made a [a step-by-step illustrated guide](GOOGLE-SETUP.md).\n\n## Testing\n\n```sh\ncomposer test\n```\n\n## Google Sheets limitations\n\nWe found several problems with using Google Sheets as a database, even though we continue to use it:\n\n- Cannot restrict editing the first row (headers) to certain people\n  - If you try protecting the cells it will prevent everyone from using a filter which is unacceptable\n  - Sometimes the page will load slowly and your collaborators will accidentally overwrite the first row, which is default-selected, and it will cause your ETL to error until fixed\n- Cannot restrict that any formatting must apply to the entire column (including new rows)\n  - Inevitably, any conditional formatting you try to set up will apply to a disjoint set of cells throughout your sheet over time\n- Cannot restrict that formulas must apply to the entire column (including new rows)\n  - Inevitably, over time your calculated \"status\" column will turn into the text literal \"DONE\" as people copy-paste-values to new rows\n- Cannot limit people from using formatting in cells (which comes by default when they paste into cells)\n- Cannot enforce a unique column\n  - Creating a custom data validation formula is cumbersome and not reliable, plus other collaborators can defeat it\n- Cannot create a sheet-level comment to document the purpose of the whole sheet \n- Filters cannot be used, because they hide rows for everybody\n  - If using another mode \"filter views\", which is harder to find, it will create hundreds of saved \"Filter 1\", \"Filter 2\" ... files.\n\n## References\n\n* PHP project layout from https://github.com/thephpleague/skeleton\n* \"You should never catch errors to report them\" https://phpdelusions.net/pdo#errors\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffulldecent%2Fgoogle-sheets-etl","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffulldecent%2Fgoogle-sheets-etl","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffulldecent%2Fgoogle-sheets-etl/lists"}