A site owner posted on the WordPress forums with one of the most frustrating problems in CF7 integrations. Out of every 10 form submissions, 1 or 2 would silently disappear. Flamingo confirmed the form submitted successfully. No error appeared in debug.log. No error showed in the browser. The lead was just gone. Submitting the same form again moments later would work perfectly.
The plugin author suggested reauthenticating and promised an update. The thread was marked resolved. The problem was not actually resolved.
Random, intermittent failures with no error log are harder to diagnose than consistent failures. When something breaks every time, you can trace it. When it breaks 15% of the time for no apparent reason, the cause is almost always something outside the plugin itself.
Here are the four real reasons this happens.
Cause 1: Google Sheets API Rate Limiting
Google's Sheets API has rate limits. The free tier allows 100 read and write requests per 100 seconds per user. If your form receives bursts of traffic where multiple people submit within the same short window, you can hit this limit. When the limit is exceeded, Google returns a 429 error and the write is dropped.
The plugin in this thread had no retry logic at the time of the forum post. When Google returned a 429, the plugin received it, had nowhere to put it, logged nothing, and moved on. The submission sat in Flamingo but never reached Sheets.
You can verify this by checking your Google Cloud Console under APIs and Services, then Google Sheets API, then Quotas. If you see a spike in quota usage that correlates with your missing submissions, rate limiting is the cause.
The fix is either to implement exponential backoff retry logic (attempt the write again after 1 second, then 2, then 4) or to upgrade to a higher Google API quota if your volume justifies it. You can also switch to a service account instead of OAuth, which has separate quota tracking and often higher effective limits.
Cause 2: PHP Execution Timeout
The system info in the forum post showed Memory Limit: 40M and Time Limit: 90 seconds. The memory limit is low for a site running WP Rocket, multiple page builders, and several active plugins. The time limit is high, but it matters less than memory.
When a CF7 form submits, the plugin makes an outbound API call to Google. If the server is under load at that moment, this API call can be slow. If the PHP process runs out of memory before the API call completes, the process is killed mid-execution. The Google Sheets write never happens. The form submission itself had already been processed by CF7 (which is why Flamingo captured it), but the Google Sheets call that runs after it never finished.
This is random by nature because server load varies. Most submissions happen when the server has capacity. Occasional submissions happen during traffic spikes or resource-heavy background tasks, and those are the ones that fail.
Check your PHP error log for Allowed memory size exhausted errors. If you see them, increasing memory_limit in php.ini or .htaccess is the fix.
Cause 3: WP Rocket Caching the Form Submission
The system info in the forum post showed WP Rocket active. WP Rocket is a powerful caching plugin but it is known to interfere with certain AJAX-based form submissions if its settings are not configured correctly.
CF7 form submissions use AJAX. WP Rocket can cache AJAX responses, delay JavaScript execution, or defer scripts in a way that changes when CF7's submission handler fires. If the AJAX request that sends data to Google Sheets gets intercepted or delayed by WP Rocket's cache or script optimisation, the request can fire at the wrong time or not at all.
Check WP Rocket's settings under File Optimization and confirm that CF7's JavaScript files are excluded from deferral. The relevant file is contact-form-7/includes/js/index.js. Also check that the CF7 AJAX action (wpcf7_submit) is excluded from WP Rocket's AJAX caching.
The fact that the problem is intermittent and that resubmitting immediately works is consistent with a caching layer interfering. The first submission hits a cached response. The second submission hits the live server.
Cause 4: Google OAuth Token Expiry Mid-Session
As covered in another post about the invalid_grant error, Google OAuth tokens expire. If the token expires while your site is handling a submission, the API call to Google Sheets will fail silently if the plugin does not surface the error properly.
The intermittent nature fits this cause too. Tokens expire at a specific time. Submissions that arrive just after expiry fail. Submissions that arrive after the token has been refreshed succeed.
Check the plugin's settings for when OAuth was last authorised. If the Google Cloud Console OAuth app is in Testing status, tokens expire after 7 days. Set it to Production to get long-lived tokens.
The Reliable Alternative: Direct API Integration
All four causes above have one thing in common. They are amplified by having a middleware plugin manage the Google connection on your behalf. When the plugin mishandles a rate limit, fails to log an error, or loses a write during a resource spike, you have no visibility and no way to retry.
Contact Form to API calls the Google Sheets API directly using a service account Bearer token instead of OAuth. Service account tokens do not expire the same way OAuth tokens do, which removes cause 4 entirely. The direct API call also gives you full visibility into the response from every submission attempt, so a 429 rate limit response shows up in your logs rather than disappearing silently.
For high-volume forms, the direct API approach also makes it easier to implement your own retry logic around the Sheets write, which the dedicated plugin does not expose.
Diagnosing Which Cause You Are Hitting
Enable WP_DEBUG and WP_DEBUG_LOG in wp-config.php if they are not already on. After your next missing submission, check wp-content/debug.log immediately for any memory, timeout, or API error entries.
Check your Google Cloud Console quotas dashboard for rate limit spikes around the times submissions went missing.
Temporarily disable WP Rocket's JavaScript optimisation and test again. If submissions stop going missing, WP Rocket is involved.
Check the last authorisation date in the GSheetConnector plugin settings and confirm your Google Cloud app is in Production status rather than Testing.
Top comments (0)