PHPackages                             fulldecent/google-sheets-etl - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Database &amp; ORM](/categories/database)
4. /
5. fulldecent/google-sheets-etl

ActiveLibrary[Database &amp; ORM](/categories/database)

fulldecent/google-sheets-etl
============================

Synchronize all your Google Sheets to your SQL database

1.0.2(2mo ago)22191[2 issues](https://github.com/fulldecent/google-sheets-etl/issues)[1 PRs](https://github.com/fulldecent/google-sheets-etl/pulls)MITPHPPHP &gt;=8.2.0

Since Oct 29Pushed 2mo ago2 watchersCompare

[ Source](https://github.com/fulldecent/google-sheets-etl)[ Packagist](https://packagist.org/packages/fulldecent/google-sheets-etl)[ Fund](https://amazon.com/hz/wishlist/ls/EE78A23EEGQB)[ Fund](https://www.paypal.me/fulldecent)[ RSS](/packages/fulldecent-google-sheets-etl/feed)WikiDiscussions main Synced yesterday

READMEChangelog (3)Dependencies (3)Versions (5)Used By (0)

[![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)

Google Sheets ETL
=================

[](#google-sheets-etl)

Import all your Google Sheets to your data warehouse, including periodic delta loads

[![Screen Shot 2019-11-07 at 15 44 33](https://user-images.githubusercontent.com/382183/68426182-91f86d00-0175-11ea-8915-3ca3700488bd.png)](https://user-images.githubusercontent.com/382183/68426182-91f86d00-0175-11ea-8915-3ca3700488bd.png)

See `example.php` how to use this library.

Install
-------

[](#install)

Via Composer

```
composer require fulldecent/google-sheets-etl:dev-main
```

Next, create a Google Service Account. This requires 20 steps so we made a [a step-by-step illustrated guide](GOOGLE-SETUP.md).

Testing
-------

[](#testing)

```
composer test
```

Google Sheets limitations
-------------------------

[](#google-sheets-limitations)

We found several problems with using Google Sheets as a database, even though we continue to use it:

- Cannot restrict editing the first row (headers) to certain people
    - If you try protecting the cells it will prevent everyone from using a filter which is unacceptable
    - 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
- Cannot restrict that any formatting must apply to the entire column (including new rows)
    - Inevitably, any conditional formatting you try to set up will apply to a disjoint set of cells throughout your sheet over time
- Cannot restrict that formulas must apply to the entire column (including new rows)
    - Inevitably, over time your calculated "status" column will turn into the text literal "DONE" as people copy-paste-values to new rows
- Cannot limit people from using formatting in cells (which comes by default when they paste into cells)
- Cannot enforce a unique column
    - Creating a custom data validation formula is cumbersome and not reliable, plus other collaborators can defeat it
- Cannot create a sheet-level comment to document the purpose of the whole sheet
- Filters cannot be used, because they hide rows for everybody
    - If using another mode "filter views", which is harder to find, it will create hundreds of saved "Filter 1", "Filter 2" ... files.

References
----------

[](#references)

- PHP project layout from
- "You should never catch errors to report them"

###  Health Score

49

—

FairBetter than 95% of packages

Maintenance84

Actively maintained with recent releases

Popularity15

Limited adoption so far

Community11

Small or concentrated contributor base

Maturity73

Established project with proven stability

 Bus Factor1

Top contributor holds 88.9% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~1158 days

Total

3

Last Release

72d ago

PHP version history (2 changes)1.0.0PHP ~7.1

1.0.2PHP &gt;=8.2.0

### Community

Maintainers

![](https://www.gravatar.com/avatar/1719e8895beb745863743f5a9aa7a296597ec5b5637906ee801bbb26ed9857f6?d=identicon)[fulldecent](/maintainers/fulldecent)

---

Top Contributors

[![fulldecent](https://avatars.githubusercontent.com/u/382183?v=4)](https://github.com/fulldecent "fulldecent (72 commits)")[![nixcms](https://avatars.githubusercontent.com/u/3533002?v=4)](https://github.com/nixcms "nixcms (9 commits)")

---

Tags

data-vaultdata-warehouseetl

###  Code Quality

TestsPHPUnit

Code StylePHP\_CodeSniffer

### Embed Badge

![Health badge](/badges/fulldecent-google-sheets-etl/health.svg)

```
[![Health](https://phpackages.com/badges/fulldecent-google-sheets-etl/health.svg)](https://phpackages.com/packages/fulldecent-google-sheets-etl)
```

###  Alternatives

[doctrine/orm

Object-Relational-Mapper for PHP

10.2k285.3M6.2k](/packages/doctrine-orm)[mongodb/mongodb

MongoDB driver library

1.6k64.0M546](/packages/mongodb-mongodb)[reliese/laravel

Reliese Components for Laravel Framework code generation.

1.7k3.4M16](/packages/reliese-laravel)[forkcms/forkcms

Fork is an open source CMS that will rock your world.

1.2k44.5k](/packages/forkcms-forkcms)[orchestra/database

Database Component for Orchestra Platform

201.4M578](/packages/orchestra-database)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
