WP Manifestindependent plugin directory

Install

Download pip-google-sheets-1.0.0.zip From the v1.0.0 release on GitHub, Mar 23, 2026

Upload it under Plugins → Add New Plugin → Upload Plugin, then activate.

Install straight from GitHub with WP-CLI:

wp plugin install https://github.com/carkeek-studios/pip-google-sheets/releases/download/v1.0.0/pip-google-sheets-1.0.0.zip
No built-in updater. New versions won't appear under Dashboard → Updates. Install new releases yourself, or let Git Updater track the repository.

A WordPress plugin that syncs WooCommerce orders and Tribe Events attendee data to Google Sheets. Two independent exports are included:

  • Orders export — for each paid WooCommerce order, one row per line item is appended in real time, including product data, Tribe event ticket details, order/customer info, and a configurable "How did you hear about us?" attribution breakdown.
  • Attendee export — a nightly cron-driven export that writes one row per attendee for every Tribe event that ended the previous day. Sheet tabs are created automatically per year (e.g. "Attendees 2026").

Requirements

  • WordPress 6.4+
  • WooCommerce 8.0+
  • PHP 8.1+
  • A Google Cloud service account with the Google Sheets API enabled
  • The Events Calendar + Event Tickets (required for attendee export)
  • WP Crontrol (recommended for triggering backfill and nightly export jobs)

Installation

  1. Download the latest release zip from GitHub Releases.
  2. In WordPress admin go to Plugins → Add New → Upload Plugin and install the zip.
  3. Activate the plugin.
  4. Go to Settings → PIP Google Sheets and configure credentials and sheet URLs.

Automatic updates via Git Updater

Install Git Updater and the plugin will check GitHub for new releases automatically.

Configuration

Option A — Admin UI (development / staging)

  1. Go to Settings → PIP Google Sheets.
  2. Paste your service account JSON into the Service Account JSON field.
  3. Enter the full URL of your Orders Sheet (WooCommerce line-item export).
  4. Optionally enter a separate Attendees Sheet URL. Leave blank to use the same spreadsheet as orders.
  5. Optionally set an Orders Tab Name (default: Sheet1). Attendee tabs are created automatically.
  6. Save, then click Test Connection to verify.

Option B — wp-config.php constant (recommended for production)

Define the service account JSON as a constant before WordPress loads:

define( 'PIP_GS_SERVICE_ACCOUNT_JSON', '{"type":"service_account","project_id":"..."}' );

When this constant is present the admin textarea is hidden and the stored encrypted value is ignored.

Google Sheet setup

Share both Google Sheets (or the single shared sheet) with the service account's client_email as an Editor.

Orders sheet headers

Paste into row 1 of your orders tab:

Product Name    Product ID  Event Name  Event Start Date    Order ID    Order Date  Customer ID Customer Name   Returning Customer  Newsletter: Fresh Ink   Google Search   Instagram   Facebook    Word of Mouth   Saw your Storefront Belltown Art Walk   Flyer   Print Ad    Other

Attendees sheet headers

Paste into row 1 of each Attendees YYYY tab (tabs are created automatically on first export for that year):

Event Name  Event Start Date    Event End Date  Category Names  Category Slugs  Attendee Name   Attendee Email  Attendee ID Ticket Name

Each column is separated by a tab character — paste directly into Google Sheets.

Column reference

Orders

# Column Source
1 Product Name WC_Order_Item_Product::get_name()
2 Product ID WC_Order_Item_Product::get_product_id()
3 Event Name Tribe Event Tickets: linked event post title
4 Event Start Date Tribe Event Tickets: _EventStartDate meta
5 Order ID WC_Order::get_id()
6 Order Date WC_Order::get_date_created()
7 Customer ID WC_Order::get_customer_id()
8 Customer Name Billing first + last name
9–19 Heard-about columns One 1 in the matching column; all others blank

Attendees

# Column Source
1 Event Name Tribe event post title
2 Event Start Date _EventStartDate meta
3 Event End Date _EventEndDate meta
4 Category Names tribe_events_cat terms, pipe-separated
5 Category Slugs tribe_events_cat slugs, pipe-separated
6 Attendee Name Tribe normalised holder_name
7 Attendee Email Tribe normalised holder_email (WC billing email fallback)
8 Attendee ID Tribe unique printable ticket ID
9 Ticket Name Ticket product title

Heard-about field

The plugin reads the order meta key _additional_wooccm0 (set by WooCommerce Checkout Manager Pro) and maps it to one of the 11 attribution columns. The mapping is filterable:

add_filter( 'pip_gs_heard_about_map', function ( $map ) {
    $map['My Custom Option'] = 10; // maps to column 19 ("Other")
    return $map;
} );

The map keys are matched case-insensitively against the stored meta value.

Cron jobs (WP Crontrol)

Both the attendee export and the orders backfill are triggered via WP Crontrol action hooks.

Nightly attendee export

Runs each night and exports attendees for any Tribe events that ended the previous day.

Field Value
Hook name pip_gs_run_attendee_export
Arguments ["nightly"]
Schedule Daily

Events already exported are skipped (idempotent — safe to re-run).

Attendee backfill (one-time)

Exports all 2026 events that have not yet been synced. Run once manually from WP Crontrol, then delete the event.

Field Value
Hook name pip_gs_run_attendee_export
Arguments ["backfill"]
Schedule Run once (manual)

Orders backfill (one-time)

Syncs historical WooCommerce orders (processing/completed) placed on or after 2025-07-01 that have not yet been exported. Processes 25 orders per run by default. Repeat until the PHP error log reports Backfill complete.

Field Value
Hook name pip_gs_backfill_orders
Arguments [25] (batch size — increase to process more per run)
Schedule Run manually until complete

Check the PHP error log after each run:

pip-google-sheets order backfill: processed 25, errors 0. More orders may remain — run again.
pip-google-sheets order backfill: processed 12, errors 0. Backfill complete.

Async processing

Real-time order syncing uses Action Scheduler (bundled with WooCommerce) so network latency never affects checkout. Failed jobs are retried automatically.

Cron-triggered exports (attendee nightly, attendee backfill, order backfill) run synchronously within the cron job and log results to the PHP error log.

Security

  • Service account credentials are encrypted with AES-256-GCM before being stored in wp_options.
  • The REST API is blocked from reading settings (show_in_rest => false).
  • The PIP_GS_SERVICE_ACCOUNT_JSON constant bypasses database storage entirely.

Changelog

1.1.0

  • Added nightly Tribe Events attendee export to a dedicated Google Sheet (or shared sheet with auto-created year tabs).
  • Added WooCommerce orders backfill via WP Crontrol (pip_gs_backfill_orders hook).
  • Settings page now has separate Orders Sheet URL and Attendees Sheet URL fields.
  • Column headers for both exports shown in Settings.

1.0.0

  • Initial release.

Releases

5 releases. Each count is every asset in that release; expand a row for the breakdown.

Tag
Published
Assets
Downloads
1.0.04 latest
Apr 13, 2026 6mo ago
tag only
—
Mar 31, 2026 6mo ago
tag only
—
Mar 31, 2026 6mo ago
tag only
—
Mar 26, 2026 7mo ago
tag only
—
Mar 23, 2026 7mo ago
pip-google-sheets-1.0.0.zip
4
A grade

Security

PIP Google Sheets 1.0.0 · audited by WP Registry

No security issues found.

Audited release
1.0.0
Findings
none
Worst severity
—
Content hash
019f96bf955fcb3425f87a00…

WP Registry hashes the installable build and reports on that exact bytes-for-bytes copy. Embargoed findings are withheld until they are disclosed, so a clean verdict means nothing public is outstanding. WP Manifest does not audit code itself.