ARPHost CF7 Submission Archive
ARPHost CF7 Submission Archive captures every Contact Form 7 submission and:
- Stores it in a dedicated database table (survives mail delivery failures — capture happens before mail is sent)
- Optionally forwards it as JSON to a Google Apps Script Web App, which appends it to a Google Sheet
- Provides an admin browser (filter by form, search, view detail, delete, resend to Sheets)
- Exports submissions to CSV
- Tracks per-submission Google Sheets delivery status, with one-click resend
No Google API keys, OAuth, or service accounts required — the Sheets integration uses a free Google Apps Script Web App you deploy in about two minutes (companion script included in google-apps-script-example.js).
Privacy
IP address and user-agent storage are off by default. Enable them in Settings only if your privacy policy covers it.
Developer hooks
cf7dbgs_capture_submission— filter; return false to skip capturing a submissioncf7dbgs_store_fields— filter fields before DB storagecf7dbgs_webhook_payload— filter the JSON payload sent to the webhookcf7dbgs_webhook_args— filter wp_remote_post argscf7dbgs_after_store— action fired after a row is stored
External services
This plugin connects to Google services to forward Contact Form 7 submissions to a Google Sheet. Both connections are off by default (Settings → Send to Google Sheets) and use your own Google account/spreadsheet — no data passes through any ARPHost server.
Google Sheets API (recommended mode)
When Delivery method is set to Google Sheets API, the plugin sends a submission’s mapped field values directly to the Google Sheets API (sheets.googleapis.com) using a Google Cloud service account you create and paste into Settings. Before that, it exchanges the service account’s key for a short-lived OAuth2 access token via Google’s token endpoint (oauth2.googleapis.com).
- What is sent: the submission’s mapped field values (plus
formTitle/formId), sent as a new row appended to the spreadsheet/tab you configured. Anti-spam/captcha tokens (reCAPTCHA, hCaptcha, Turnstile) are stripped before sending. For authentication, a signed JWT derived from your own service-account credentials is sent to obtain the access token — no data is sent to any third party you did not configure. - When it’s sent: immediately after a matching Contact Form 7 submission (if enabled), or when an admin manually clicks “Resend” on a stored submission.
- Service: Google Sheets API / Google Cloud Platform, operated by Google LLC. Terms of Service · Google Privacy Policy
Google Apps Script webhook (alternate mode)
When Delivery method is set to Webhook, the same submission payload (JSON) is POSTed instead to a Google Apps Script Web App URL that you deploy yourself from google-apps-script-example.js (bundled with this plugin). That script runs on Google’s infrastructure (script.google.com / script.googleusercontent.com) under your own Google account and appends the row to your sheet.
- What is sent: the same mapped field values described above (
formTitle/formIdplus form fields, captcha tokens stripped), sent as the POST body. - When it’s sent: immediately after a matching submission (if enabled), or on manual “Resend”.
- Service: Google Apps Script, operated by Google LLC. Terms of Service · Google Privacy Policy