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/
How to Integrate the RegCheck Vehicle Lookup #API with #OpenAI Actions
In today’s AI-driven world, connecting specialized APIs to large language models opens up powerful possibilities. One particularly useful integration is connecting vehicle registration lookup services to OpenAI’s custom GPTs through Actions. In this tutorial, we’ll walk through how to integrate the RegCheck API with OpenAI Actions, enabling your custom GPT to look up vehicle information from over 30 countries.
What is RegCheck?
RegCheck is a comprehensive vehicle data API that provides detailed information about vehicles based on their registration numbers (license plates). With support for countries including the UK, USA, Australia, and most of Europe, it’s an invaluable tool for automotive businesses, insurance companies, and vehicle marketplace platforms.
Why Integrate with OpenAI Actions?
OpenAI Actions allow custom GPTs to interact with external APIs, extending their capabilities beyond text generation. By integrating RegCheck, you can create a GPT assistant that:
- Instantly looks up vehicle specifications for customers
- Provides insurance quotes based on real vehicle data
- Assists with vehicle valuations and sales listings
- Answers detailed questions about specific vehicles
Prerequisites
Before you begin, you’ll need:
- An OpenAI Plus subscription (for creating custom GPTs)
- A RegCheck API account with credentials
- Basic familiarity with OpenAPI specifications
Step-by-Step Integration Guide
Step 1: Create Your Custom GPT
Navigate to OpenAI’s platform and create a new custom GPT. Give it a name like “Vehicle Lookup Assistant” and configure its instructions to handle vehicle-related queries.
Step 2: Add the OpenAPI Schema
In your GPT configuration, navigate to the “Actions” section and add the following OpenAPI specification:
yaml
openapi: 3.0.0
info:
title: RegCheck Vehicle Lookup API
version: 1.0.0
description: API for looking up vehicle registration information across multiple countries
servers:
- url: https://www.regcheck.org.uk/api/json.aspx
paths:
/Check/{registration}:
get:
operationId: checkUKVehicle
summary: Get details for a vehicle in the UK
parameters:
- name: registration
in: path
required: true
schema:
type: string
description: UK vehicle registration number
responses:
'200':
description: Successful response
content:
application/json:
schema:
type: object
/CheckSpain/{registration}:
get:
operationId: checkSpainVehicle
summary: Get details for a vehicle in Spain
parameters:
- name: registration
in: path
required: true
schema:
type: string
description: Spanish vehicle registration number
responses:
'200':
description: Successful response
content:
application/json:
schema:
type: object
/CheckFrance/{registration}:
get:
operationId: checkFranceVehicle
summary: Get details for a vehicle in France
parameters:
- name: registration
in: path
required: true
schema:
type: string
description: French vehicle registration number
responses:
'200':
description: Successful response
content:
application/json:
schema:
type: object
/VinCheck/{vin}:
get:
operationId: checkVehicleByVin
summary: Get details for a vehicle by VIN number
parameters:
- name: vin
in: path
required: true
schema:
type: string
description: Vehicle Identification Number
responses:
'200':
description: Successful response
content:
application/json:
schema:
type: object
Note: You can expand this schema to include additional endpoints for other countries as needed. The RegCheck API supports over 30 countries.
Step 3: Configure Authentication
- In the Authentication section, select Basic authentication
- Enter your RegCheck API username
- Enter your RegCheck API password
- OpenAI will securely encrypt and store these credentials
The authentication header will be automatically included in all API requests made by your GPT.
Step 4: Test Your Integration
Use the built-in test feature in the Actions panel to verify the connection:
- Select the
checkUKVehicleoperation - Enter a test registration like
YYO7XHH - Click “Test” to see the response
You should receive a JSON response with vehicle details including make, model, year, engine size, and more.
Step 5: Configure GPT Instructions
Update your GPT’s instructions to effectively use the new Actions:
You are a vehicle information assistant. When users provide a vehicle
registration number, use the appropriate CheckVehicle action based on
the country. Present the information in a clear, user-friendly format.
Always ask which country the registration is from if not specified.
Provide helpful context about the vehicle data returned.
Example Use Cases
Once integrated, your GPT can handle queries like:
User: “What can you tell me about UK registration YYO7XHH?”
GPT: [Calls checkUKVehicle action] “This is a 2007 Peugeot 307 X-line with a 1.4L petrol engine. It’s a 5-door manual transmission vehicle with right-hand drive…”
User: “Look up Spanish plate 0075LTJ”
GPT: [Calls checkSpainVehicle action] “Here’s the information for that Spanish vehicle…”
Best Practices and Considerations
API Limitations
- The RegCheck API is currently in BETA and may change without notice
- Consider implementing error handling in your GPT instructions
- Be aware of rate limits on your API account
Privacy and Security
- Never expose API credentials in your GPT’s instructions or responses
- Inform users that vehicle lookups are being performed
- Comply with data protection regulations in your jurisdiction
Optimizing Performance
- Cache frequently requested vehicle information where appropriate
- Use the most specific endpoint (e.g., CheckSpain vs. generic Check)
- Consider implementing fallback behavior for failed API calls
Expanding the Integration
The RegCheck API offers many more endpoints you can integrate:
- UKMOT: Access MOT test history for UK vehicles
- WheelSize: Get wheel and tire specifications
- CarSpecifications: Retrieve detailed specs by make/model/year
- Country-specific checks: Add support for Australia, USA, and 25+ other countries
Simply add these endpoints to your OpenAPI schema following the same pattern.
Troubleshooting Common Issues
Authentication Errors: Double-check your username and password are correct in the Authentication settings.
404 Not Found: Verify the registration format matches the country’s standard format.
Empty Responses: Some vehicles may not have complete data in the RegCheck database.
Conclusion
Integrating the RegCheck API with OpenAI Actions transforms a standard GPT into a powerful vehicle information assistant. Whether you’re building tools for automotive dealerships, insurance platforms, or customer service applications, this integration provides instant access to comprehensive vehicle data from around the world.
The combination of AI’s natural language understanding with RegCheck’s extensive vehicle database creates a seamless user experience that would have required significant custom development just a few years ago.
Ready to get started? Create your RegCheck account, set up your custom GPT, and start building your vehicle lookup assistant today!