A site owner posted on the WordPress forums that their CF7 to Google Sheets integration was dropping about a third of submissions. Email notifications were being sent. The submission was saved in the form plugin's database. But one in three never made it to the spreadsheet.
Another user confirmed the same pattern. A third user said it had worked perfectly for months and then started failing.
The GSheetConnector support team's reply: "There is a Google API limit of 300 requests per minute, and our maximum users are connected with the same API, therefore there is a chance to miss the form entry when the limit is exhausted."
That one sentence contains the entire explanation — but most people read it quickly and miss the critical phrase: the same API. Let me explain what that actually means.
The Shared API Quota Problem
Google Sheets API has usage quotas:
- 300 write requests per minute per project
- 60 write requests per minute per user per project
The key word is project. A Google Cloud project is registered by a developer. Every API call from that project counts against its quota.
The free tier of GSheetConnector (and several other CF7 to Google Sheets plugins) makes API calls using the plugin developer's own Google Cloud project. Not yours. Theirs.
This means every WordPress site running the free version of the plugin shares the same 300 requests/minute quota. When there are thousands of active installations, the shared quota gets exhausted during busy periods. Your submission arrives at the plugin, the plugin tries to write to your sheet, Google returns 429 Too Many Requests, and the write is silently dropped.
You are not hitting Google's quota limit. The plugin developer's shared project is hitting it — across thousands of sites simultaneously.
Why This Happens More as the Plugin Grows
The more popular the plugin becomes, the worse this problem gets. More installations means more API calls competing for the same quota bucket. A plugin that worked reliably when it had 10,000 active installs may start dropping submissions consistently at 50,000 installs.
This is not a bug the plugin author can easily fix in the free tier. Giving each user their own Google Cloud project credentials is the fix — but that requires users to set up their own project, which is the Pro version's "manual method" or "custom API" feature.
The Fix: Use Your Own Google Cloud Project
The correct long-term fix is to register your own Google Cloud project and connect the plugin to your own Sheets API credentials. This gives you your own isolated 300 requests/minute quota. Your submissions no longer compete with anyone else's.
Step 1: Create a Google Cloud Project
- Go to
console.cloud.google.com - Click "New Project" and give it a name like "CF7 Sheets Integration"
- Enable the Google Sheets API under APIs & Services → Library
Step 2: Create Service Account Credentials
- Under APIs & Services → Credentials, click "Create Credentials"
- Choose "Service Account"
- Complete the setup and download the JSON key file
- Share your Google Sheet with the service account email address (it ends in
@your-project.iam.gserviceaccount.com) as Editor
Step 3: Configure Your Plugin
In GSheetConnector Pro (or any plugin that supports custom credentials), enter your own credentials rather than using the shared plugin credentials.
This completely eliminates the shared quota problem. Your API calls go to your project, your quota, and nobody else's traffic affects yours.
Using the Google Sheets API Directly
If you want to bypass the plugin entirely and call the Sheets API directly from CF7, Contact Form to API handles the outbound call. You configure the Sheets API endpoint with your service account Bearer token and the API appends a row to your spreadsheet on every form submission.
The Sheets API endpoint for appending a row:
POST https://sheets.googleapis.com/v4/spreadsheets/{spreadsheetId}/values/{range}:append?valueInputOption=USER_ENTERED
Authorization: Bearer YOUR_SERVICE_ACCOUNT_TOKEN
Content-Type: application/json
{
"values": [
["[your-name]", "[your-email]", "[your-phone]", "[your-message]"]
]
}
Replace {spreadsheetId} with your sheet's ID (from the URL) and {range} with the range like Sheet1!A:D. Each CF7 field value goes in order into the columns.
Since you are using your own service account, you get your own isolated quota. No shared project. No dropped submissions during traffic spikes.
Diagnosing Whether This Is Your Problem
Enable the debug log in GSheetConnector. Go to the plugin settings and turn on "Debug Log." After your next missing submission, check the log file immediately. If you see:
Quota exceeded for quota metric 'Write requests'
or
429: Too many requests
The shared quota is the cause. The fix is moving to your own Google Cloud credentials.
If the log shows no entry at all for the missing submission, the problem may be something else — an OAuth token expiry, a PHP memory limit, or a WP Rocket caching conflict (all covered in the previous post on random Google Sheets failures).
Quick Reference
| Symptom | Cause | Fix |
|---|---|---|
| 1 in 3 submissions missing | Shared API quota exhausted | Use own Google Cloud project credentials |
| Works fine then fails under traffic | Same quota problem under load | Same fix |
Debug log shows 429
|
Quota limit hit | Own credentials or reduce API calls with batching |
Debug log shows Quota exceeded
|
Same | Same |
| Debug log shows nothing for missing entry | Different cause (OAuth, memory, caching) | See separate debugging guide |
Top comments (0)