Archive
Google Calendar Privacy Proxy
https://github.com/infiniteloopltd/Google-Calendar-Redactor-Proxy/
A lightweight Google Cloud Run service that creates privacy-protected calendar feeds from Google Calendar. Share your availability with colleagues without exposing personal appointment details.
The Problem
You want to share your calendar availability with work colleagues, but:
- You have multiple calendars (work, personal, family) that you need to consolidate
- Google Calendar’s subscribed calendars (ICS feeds) don’t count toward your Outlook free/busy status
- You don’t want to expose personal appointment details to work contacts
- Outlook’s native calendar sharing only works with Exchange/Microsoft 365 calendars, not external ICS subscriptions
This service solves that problem by creating a privacy-filtered calendar feed that Outlook can subscribe to, showing you as “Busy” during your appointments without revealing what those appointments are.
How It Works
Google Calendar → This Service → Privacy-Protected ICS Feed → Outlook
(full details) (redaction) (busy blocks only) (subscription)
The service:
- Fetches your Google Calendar ICS feed using the private URL
- Strips out all identifying information (titles, descriptions, locations, attendees)
- Replaces event summaries with “Busy”
- Preserves all timing information (when you’re busy/free)
- Returns a sanitized ICS feed that Outlook can subscribe to
Use Cases
- Multiple calendar consolidation: Combine work, personal, and family calendars into one availability view
- Privacy-protected sharing: Share when you’re busy without sharing what you’re doing
- Cross-platform calendaring: Bridge Google Calendar into Outlook environments
- Professional boundaries: Keep personal life private while showing accurate availability
Quick Start
1. Get Your Google Calendar Private URL
- Open Google Calendar
- Click the ⚙️ Settings icon → Settings
- Select your calendar from the left sidebar
- Scroll to “Integrate calendar”
- Copy the “Secret address in iCal format” URL
Your URL will look like:
https://calendar.google.com/calendar/ical/info%40infiniteloop.ie/private-xxxxxxx/basic.ics
2. Deploy the Service
# Edit deploy.bat and set your PROJECT_ID deploy.bat # Or deploy manually gcloud run deploy calendar-proxy --source . --platform managed --region europe-west1 --allow-unauthenticated
You’ll get a service URL like: https://calendar-proxy-xxxxxxxxxx-ew.a.run.app
3. Construct Your Privacy-Protected Feed URL
From your Google Calendar URL:
https://calendar.google.com/calendar/ical/info%xxxxx.xxx/private-xxxxxxx/basic.ics
Extract:
- calendarId:
info@infiniteloop.ie(URL decoded) - privateKey:
xxxxxxxxxx(just the key, without “private-” prefix)
Build your proxy URL:
https://calendar-proxy-xxxxxxxxxx-ew.a.run.app/calendar?calendarId=info@infiniteloop.ie&privateKey=xxxxxxx
4. Subscribe in Outlook
Outlook Desktop / Web
- Open Outlook
- Go to Calendar
- Click Add Calendar → Subscribe from web
- Paste your proxy URL
- Give it a name (e.g., “My Availability”)
- Click Import
Outlook will now show:
- ✅ Blocked time during your appointments
- ✅ “Busy” status for those times
- ❌ No details about what the appointments are
What Gets Redacted
The service removes all identifying information:
| Original ICS Property | Result |
|---|---|
SUMMARY: (event title) | → "Busy" |
DESCRIPTION: (event details) | → Removed |
LOCATION: (where) | → Removed |
ORGANIZER: (who created it) | → Removed |
ATTENDEE: (participants) | → Removed |
URL: (meeting links) | → Removed |
ATTACH: (attachments) | → Removed |
CLASS: (privacy) | → Set to PRIVATE |
What Gets Preserved
All timing and scheduling information remains intact:
- ✅ Event start times (
DTSTART) - ✅ Event end times (
DTEND) - ✅ Event duration
- ✅ Recurring events (
RRULE) - ✅ Exception dates (
EXDATE) - ✅ Event status (confirmed, tentative, cancelled)
- ✅ Time zones
- ✅ All-day events
- ✅ Unique identifiers (
UID)
Technical Details
Stack: .NET 8 / ASP.NET Core Minimal API
Hosting: Google Cloud Run (serverless)
Cost: Virtually free for personal use (Cloud Run free tier: 2M requests/month)
Latency: ~200-500ms per request (fetches from Google, processes, returns)
API Endpoint
GET /calendar?calendarId={id}&privateKey={key}
Parameters:
calendarId(required): Your Google Calendar ID (usually your email)privateKey(required): The private key from your Google Calendar ICS URL
Response:
- Content-Type:
text/calendar; charset=utf-8 - Body: Privacy-redacted ICS feed
Local Development
# Run locally dotnet run # Test curl "http://localhost:8080/calendar?calendarId=test@example.com&privateKey=abc123"
Deployment
Prerequisites
- Google Cloud SDK installed
- .NET 8 SDK installed
- GCP project with Cloud Run API enabled
- Billing enabled on your GCP project
Deploy
# Option 1: Use the batch file deploy.bat # Option 2: Manual deployment gcloud run deploy calendar-proxy ^ --source . ^ --platform managed ^ --region europe-west1 ^ --allow-unauthenticated ^ --memory 512Mi
The --allow-unauthenticated flag is required so that Outlook can fetch your calendar without authentication. Your calendar data is still protected by the private key in the URL.
Security & Privacy
Is This Secure?
Yes, with caveats:
✅ Your calendar data is already protected by Google’s private key mechanism
✅ No data is stored – the service is stateless and doesn’t log calendar contents
✅ HTTPS encrypted – All traffic is encrypted in transit
✅ Minimal attack surface – Simple pass-through service with redaction
⚠️ Considerations:
- Your private key is in the URL you share (same as Google’s original ICS URL)
- Anyone with your proxy URL can see your busy/free times (but not details)
- The service runs as
--allow-unauthenticatedso Outlook can fetch it - If you need stricter access control, consider adding authentication
Privacy Features
- Strips all personally identifying information
- Marks all events as
CLASS:PRIVATE - No logging of calendar contents
- No data persistence
- Stateless operation
Recommendations
- Don’t share your proxy URL publicly
- Treat it like a password – it grants access to your availability
- Regenerate your Google Calendar private key if compromised
- Monitor your Cloud Run logs for unexpected access patterns
Cost Estimation
Google Cloud Run pricing (as of 2025):
- Free tier: 2M requests/month, 360,000 GB-seconds/month
- Typical calendar: Refreshes every 30-60 minutes
- Monthly cost: $0 for personal use (well within free tier)
Even with 10 people subscribing to your calendar refreshing every 30 minutes:
- ~14,400 requests/month
- ~$0.00 cost
Troubleshooting
“404 Not Found” when subscribing in Outlook
- Verify your service is deployed:
gcloud run services list - Check your URL is correctly formatted
- Ensure
--allow-unauthenticatedis set
“Invalid calendar” error
- Verify your Google Calendar private key is correct
- Test the URL directly in a browser first
- Check that your calendarId doesn’t have URL encoding issues
Events not showing up
- Google Calendar ICS feeds can take 12-24 hours to reflect changes
- Try re-subscribing to the calendar in Outlook
- Verify the original Google Calendar ICS URL works
Deployment fails
# Ensure you're authenticated gcloud auth login # Set your project gcloud config set project YOUR_PROJECT_ID # Enable required APIs gcloud services enable run.googleapis.com gcloud services enable cloudbuild.googleapis.com
Limitations
- Refresh rate: Calendar clients typically refresh ICS feeds every 30-60 minutes (not real-time)
- Google’s ICS feed: Updates can take up to 24 hours to reflect in the ICS feed
- Authentication: No built-in authentication (relies on URL secrecy)
- Multi-calendar: Requires one proxy URL per Google Calendar
Alternatives Considered
| Solution | Pros | Cons |
|---|---|---|
| Native Outlook calendar sharing | Built-in, real-time | Only works with Exchange calendars |
| Calendly/Bookings | Professional, feature-rich | Monthly cost, overkill for simple availability |
| Manual sync (Zapier/Power Automate) | Works | Complex setup, ongoing maintenance |
| This solution | Simple, free, privacy-focused | Relies on ICS feed delays |
Contributing
Contributions welcome! Areas for enhancement:
- Add basic authentication support
- Support multiple calendars in one feed
- Caching layer to reduce Google Calendar API calls
- Health check endpoint
- Metrics/monitoring
- Custom “Busy” text per calendar
License
MIT License – free to use, modify, and distribute.
Author
Created by Infinite Loop Development Ltd to solve a real business need for calendar privacy across platforms. https://github.com/infiniteloopltd/Google-Calendar-Redactor-Proxy/
Unlock Brand Recognition in Emails: Free #BIMI #API from AvatarAPI.com

Email marketing is more competitive than ever, and standing out in crowded inboxes is a constant challenge. What if there was a way to instantly make your emails more recognizable and trustworthy? Enter BIMI – a game-changing email authentication standard that’s revolutionizing how brands appear in email clients.
What is BIMI? (In Simple Terms)
BIMI stands for “Brand Indicators for Message Identification.” Think of it as a verified profile picture for your company’s emails. Just like how you recognize friends by their profile photos on social media, BIMI lets email providers display your company’s official logo next to emails you send.
Here’s how it works in everyday terms:
- Traditional email: When Spotify sends you an email, you might only see their name in your inbox
- BIMI-enabled email: You’d see Spotify’s recognizable logo right next to their name, making it instantly clear the email is legitimate
This visual verification helps recipients quickly identify authentic emails from brands they trust, while making it harder for scammers to impersonate legitimate companies.
Why BIMI Matters for Your Business
Instant Brand Recognition: Your logo appears directly in the inbox, increasing brand visibility and email open rates.
Enhanced Trust: Recipients can immediately verify that emails are genuinely from your company, reducing the likelihood they’ll mark legitimate emails as spam.
Competitive Advantage: Many companies haven’t implemented BIMI yet, so adopting it early helps you stand out.
Better Deliverability: Email providers like Gmail and Yahoo prioritize authenticated emails, potentially improving your delivery rates.
Introducing the Free BIMI API from AVATARAPI.com
While implementing BIMI traditionally requires DNS configuration and technical setup, AVATARAPI.com offers a simple API that lets you retrieve BIMI information for any email domain instantly. This is perfect for:
- Email marketing platforms checking sender authenticity
- Security tools validating email sources
- Analytics services tracking BIMI adoption
- Developers building email-related applications
How to Use the Free BIMI API
Getting started is incredibly simple. Here’s everything you need to know:
API Endpoint
POST https://avatarapi.com/v2/api.aspx
Request Format
Send a JSON request with these parameters:
{
"username": "demo",
"password": "demo___",
"provider": "Bimi",
"email": "no-reply@alerts.spotify.com"
}
Parameters Explained:
username&password: Use “demo” and “demo___” for free accessprovider: Set to “Bimi” to retrieve BIMI dataemail: The email address you want to check for BIMI records
Example Response
The API returns comprehensive BIMI information:
{
"Name": "",
"Image": "https://message-editor.scdn.co/spotify_ab_1024216054.svg",
"Valid": true,
"City": "",
"Country": "",
"IsDefault": false,
"Success": true,
"RawData": "",
"Source": {
"Name": "Bimi"
}
}
Response Fields:
Image: Direct URL to the company’s BIMI logoValid: Whether the BIMI record is properly configuredSuccess: Confirms the API call was successfulIsDefault: Indicates if this is a fallback or authentic BIMI record
Practical Use Cases
Email Security Platforms: Verify sender authenticity by checking if incoming emails have valid BIMI records.
Marketing Analytics: Track which competitors have implemented BIMI to benchmark your email marketing efforts.
Email Client Development: Integrate BIMI logo display into custom email applications.
Compliance Monitoring: Ensure your company’s BIMI implementation is working correctly across different domains.
Try It Now
Ready to explore BIMI data? The API is free to use with the demo credentials provided above. Simply make a POST request to test it with any email address – try major brands like Spotify, PayPal, or LinkedIn to see their BIMI implementations in action.
Whether you’re a developer building email tools, a marketer researching competitor strategies, or a security professional validating email authenticity, this free BIMI API provides instant access to valuable brand verification data.
Start integrating BIMI checking into your applications today and help make email communication more secure and recognizable for everyone.
https://www.avatarapi.com/