Describe the problem/error/question
I’m experiencing intermittent 403 Forbidden errors when sending POST requests from Google Apps Script to an n8n webhook. The same exact request works 100% of the time when executed from a browser’s developer console using fetch().
Key symptoms:
-
Intermittent: Sometimes works, sometimes fails with the same code
-
Not authentication related: Happens with and without Basic Auth
What I’ve Tested
1. Different Headers Configurations
-
Minimal headers (none)
-
Browser-like User-Agent (Chrome, Firefox, Safari)
-
Default Apps Script headers
-
Postman-like headers
-
Various combinations of Accept, Cache-Control, etc.
Result: 403 errors persist with all configurations
2. Authentication Methods
-
No authentication
-
Basic Auth (username:password)
-
Bearer token
-
Custom headers
Result: 403 errors occur regardless of auth method
3. Request Timing & Retry Logic
-
Added exponential backoff (2s, 4s, 8s delays)
-
Random delays between requests (0.5-3 seconds)
-
Reduced request frequency
-
Sequential requests vs parallel
Result: Intermittency remains
4. Payload Variations
Result: Size/content doesn’t affect 403 rate
5. Network & Infrastructure
-
Same Google Account across tests
-
Same Apps Script project
-
Same n8n instance/URL
Questions
-
Is this a known issue between Google Apps Script and n8n webhooks?
-
Could this be related to:
-
Google’s IP ranges being treated differently?
-
Some hidden rate limiting in n8n?
-
CORS/preflight issues?
-
User-Agent blacklisting?
-
-
Why does the exact same request work 100% from browser but fails intermittently from Apps Script?
-
Are there specific n8n webhook configurations that work better with Apps Script?
Webhook Configuration
What is the error message (if any)?
{“message”: “Forbidden”,“status”: 403}
Please share your workflow
https://n8n-prod.cadastra.com/workflow/9Hbcp5yacCRfHro6
Share the output returned by the last node
Information on your n8n setup
- n8n version: 2.9.4
- Database (default: SQLite): postgres
- n8n EXECUTIONS_PROCESS setting (default: own, main):
- Running n8n via (Docker, npm, n8n cloud, desktop app): docker (self-hosted)
- Operating system: