Sending Millions of Calendar Invites for the 2025 NFL Season on AWS SES
Setting up the 2025 NFL season for tickets, merchandise and vendor campaigns
TL/DR
A Calendar Client is a powerful tool that can ingest complex sporting schedules.
In this NFL game series, we utilize the sporting schedules from a calendar client and send the events to the AWS Calendar Invite Server to automatically process and store calendar invite events.
Then, we use the original calendar invitation sent to the AWS Calendar Invite Server to update the data in the AWS Calendar Invite Server.
We then demonstrate how to cancel the event, using the same workflow.
The Calendar Invite events stored in the AWS Calendar Invite Server are used in conjunction with the nine APIs built for sending calendar invites, collecting RSVP data, and providing reporting.
This post is part of an ongoing series on how the Calendar Invite can be used to promote tickets, merchandise, and vendors.
Loading Calendar Invite Data into the AWS Calendar Invite Server
The games are loaded onto an organizer’s calendar client using the ICAL Files from a global sporting site called Fixture Downloads for ICAL Game Data.
We start with the first one in alphabetical order. Arizona Cardinals.
Step One - Get them on a Google or Outlook Calendar first
Note that we have learned through trial and error that this approach works for the MLB, NBA, and NFL.
You're welcome to explore along the way.
All Game data is free, and the Calendarsnack App is also free, which communicates with the APIs.
Global Game Data - fixturedownload.com
Front end App built with AWS Calendar Invite Server API’s - Calendarsnack.com.
Access to the AWS Calendar Invite Server. Just contact me. I will send you the ZIP File. Git Wiki is here.
Snapshots for MLB, NBA, and NFL using the AWS Calendar Invite Server

The schedules follow the MLB format with 30 teams playing 162 games, totaling 4,860 games in the season. 4860/2 =2,430 Games that need to be displayed.
MLB 2025 Upcoming Page with Calendar Invites here. https://tinyurl.com/2s39nd56

The schedules follow the NBA format, with 30 teams playing 82 games each, totaling 2,460 games in the season. 2460/2 =1,230 Games that need to be displayed.

The schedules follow the NFL format, with 32 teams playing 17 games each, totaling 544 games in the season. 544/2 =272 Games that need to be displayed.
Where to get the NFL Game Data?
The fixture download is available above—32 teams for Football with 17 Games each.
Starting with the AZ Cardinals.
Setting Up Individual Game Calendars on Google or Outlook Calendars
This step is optional but recommend.
As you will see in this series, when we load games, this feature will help control the “Campaigns” views for each game using the Calendar Client.
This is accomplished by accessing your calendar client and creating a new calendar, as shown above. In this case, I made the “AZ Cardinals”. Saved it and now it’s in my picker.
Why? We will have 32 teams to view the schedules.
That is 544 Calendar Events on my Calendar. Therefore, the ability to view teams through individual filters is helpful.
I will be “DE-DUPING” them for display and calendar invite sending reasons, since we only need to display one game for the API.
I do this by deleting one of the duplicated games for the same Round using the “Day” view in the Calendar Client.
That leaves 272 to serve up in APIs for the NFL.
Getting Football data into the Google Calendar
Step 1 - Find the NFL Game data for the Arizona Cardinals and download the ICAL, then save it.
From fixturedownload.com
Getting Football data into the Google Calendar
Step 2 - Click the ICS file to download it and save it to a folder, preparing for the next step, which is importing it into a Google Calendar.
The organizer of the Calendar Client is the organizer in the AWS Calendar Invite Server.
Getting Football data into the Google Calendar
Step 3- Go to your Google or Outlook calendar. For Google, CLICK on the GEAR ICON on the Google CALENDAR PAGE. It’s not on the GMAIL PAGE.
CLICK on the SETTINGS and SCROLL down to IMPORT & EXPORT. This will open up the Interface to upload the ICS File for the AZ Cardinal Game Schedule.
Getting Football data into the Google Calendar
Step 4- You can CREATE GAME Calendars for your NBA, NFL, and MLB Teams Under one GMAIL or Outlook ACCOUNT.
Why? - This allows the organizer to toggle or filter the Game Data for particular teams using just one identity or organizer name.
Example: For the NFL, there are 32 Teams and 272 Games that need to be displayed.
This will become more important for the NBA, as it will require 1,230 games to be loaded and displayed, and the MLB will need to load and display 2,430 games.
Calendar Clients and the AWS Calendar Invite Server
It sounds overwhelming at first but the Outlook and Google Calendar Clients make a great Calendar Invite Campaign tool for create, update and cancel combined with the the power of the AWS Calendar Invite APIs.
Getting Football data into the Google Calendar
Loading the Game into your Arizona Cardinal Calendar. Step 5- SELECT the ICS FILE for the ARIZONA CARDINALS NFL Game.
What does the AZ Cardinals Calendar look like when completed?
This Calendar Client Console is a Campaign Management Tool
The Calendar Client console is a powerful Tool for managing thousands of sporting events across a multi-year international schedule.
In the 18 months we have approached, we have managed over 4,000 events across the overlapping schedules of MLB, NBA, and NFL in multiple Calendar Clients, exploring how to set up, manage, and run campaigns on AWS SES using calendar invites.
Schedule View of the AZ Cardinals loaded onto Google Calendar
All the AZ Cardinals games are loaded in the Calendar Client
The next step is to send the AZ Cardinal data to the AWS Calendar Invite Server.
This is done by sending the Calendar Invite to an AWS SES mailbox in the Calendar Client of the Organizer that has the Game Data.
You can complete this exercise using the create@calendarsnack.com email address in your calendar client to send data to the AWS Calendar Invite Server, if you have game data on it, and want to build a test workflow by following this blog post.
Getting the Football data into the AWS Calendar Invite Server
AWS Calendar Invite Server workflow starts with AWS SES Mailbox
By using the create@calendarsnack email address in the Calendar Client, you can test how we built our application called calendarsnack.
The email address and domain are configurable if you are going to run the AWS Calendar Invite Server in your AWS account.
That means you can assign whatever email address you wish at your domain for your customers to use. The Email Address on the AWS SES box stores a copy of the Calendar Invite message in S3 and becomes the endpoint for data drop off.
SNS notifies the Lambdas, which initiate the disassembly process of the Calendar Invite to extract the ICAL components. These components are then stored in S3 and DynamoDB and can be updated or canceled using the Calendar Client used for that event.
The Calendar invite data elements are reassembled by the Lambdas when the Calendar Invite EndPoint API #1 is called and matched to an email address provided in a web form or email mailing list, which is accomplished through the use of the AWS SES Multipart API.
The Calendar Invite is sent using API #1 to the Email Address and then tracked for Calendar Receipts in the AWS Calendar Invite Server.
The AWS Calendar Invite API’s
API #1 is reserved for sending a single calendar invite when the API endpoint is called.
#2 through #9 APIS gather Calendar Invite detail information for Single Events and all events for Organizers and Domain Owners for Calendar Invite Analytics.
Below is a sample of data pulled for the Organizer Calendar Invites Sent.
Data Collection on AWS Calendar Invite Server

This is a sample of the application pulling API data and reporting on the event details for a single Calendar Invite Event.
RSVP Totals by Accepted, Maybe, Maybe.
Total Invitees. RSVP Response%. Invitee Source.
Event Message. Event Information. Event Summary.
Calendar Client: New, Update, and Cancel to the AWS Calendar Invite Server
Your RSVP brand is protected using your domain and AWS SES Infrastructure
The AWS SES infrastructure is crucial for any brand that sends millions of emails annually, both for transactional and marketing purposes.
The AWS Calendar Invite Server sits on top of the AWS Simple Email Service (SES) and can be used for Calendar Invite Campaigns driven by calendar clients.
The Calendar Clients are a crucial part of the story and a key factor in the success of creating, updating, and canceling campaigns in the AWS Calendar Invite Server.
We believe that if you're sending emails for time-based events to your customers, then sending a direct calendar invite is not offensive or illegal.
We recommend two workflows:
Send a calendar invitation first from your mailing list.
Provide an Upcoming Events page with embedded calendar invitations for self-service.
Who is an Organizer?
Organizers are the names of the email addresses of the Calendar Clients used to send Calendar Invites to a configured AWS SES Mailbox for the AWS Calendar Invite Server.
In the Example below: mandy@techvder.com is the Organizer that we review in this blog post for NFL 2025 data.
All data for workflow and processing is tagged from the Calendar Client to the Database under her email name.
Each individual Organizer is API filtered and tracked this way in S3, Dynamo DB.
Deep Dive on Calendar Invite Compenents
AWS SES Mailbox
The AWS SES-configured email box is where all AWS calendar invite server processing begins for new, updated, and canceled events.
NEW
NEW is the first creation of a Calendar Invite event that is sent from the Organizer's Calendar client to a configured email box on AWS SES. In our example, it is create@calendarsnack.com.
AWS customers can choose an email name to deploy for users to send Calendar Client Invites to process on the AWS Calendar Invite Server based on domain township and MX Record confiruations. Example create@yourbrand.com.
Calendar Invite Event registration
The Calendar Invite Event is registered in the DynamoDB database with a unique identifier UID when it is sent to the AWS SES Box. It can be updated an unlimited number of times up to the event time and date.
Disassembly of the Calendar Invite Data
The disassembly routine for Calendar Invite Event Data from AWS SES Inbox is performed using S3, SNS, SQS, Lambda (Python), and API Gateway to Extract Transform and Load (ETL) the Calendar Invite data and store its components in DynamoDB, along with an incremented UID and Organizer Name.
Assembly of the Calendar Invite Data
The data is reassembled from the storage layer when the AWS Calendar Invite Server using a Extract, Load and Transform (ELT) when API #1 is called to send a Single Calendar Invite using the AWS SES Multipart RAW API.
Setting Update and Cancel for Millions of Calendar Invite Events
The ability to ETL and ELT on demand is the basis for create , update and cancel automation using the Calendar Client with the AWS Calendar Invite APIs.
This establishes the groundwork for UID updates and deletes in the campaign workflow, which is all completed in the Calendar Client of the Organizer, communicating with the AWS Calendar Invite Server.
Subsequent updates and cancellations from the Organizers Calendar Client are processed in the same way, for change data capture tracking.
UPDATE Workflow
If an UPDATE occurs to the original calendar invite in the calendar client and it is SAVED, it is resent to the AWS SES Mailbox using the create@yourdomain.com and inserts a UID increment that indicates it has been updated.
Updates can occur an unlimited number of times from the Calendar Client to the AWS Calendar Invite Server before the event's expiration date.
Example: Using UPDATE for time changes, venue changes, or date changes. From a Campaign Management standpoint : promotions could be added to encourage participation on the date of the Calendar Invite. Examples include Coupons, time-limited offers for merchandise, and Tickets for Concerts.
How the Calendar Client UPDATE works if a Customer has received a Calendar Invite for that event from API #1
Suppose the Organizer updates the Calendar Invite on their Calendar Client, which was already sent by the AWS Calendar Invite Server using API #1, Single Calendar Invite Send in a Campaign using one of its workflows in a application.
In that case, the AWS Calendar Invite Server automatically sends the UPDATED Calendar Invite to the customers who have replied Y or ’ from the Calendar Receipts. If they have responded 'no' to the first Calendar Invite, then they will not receive an updated calendar invite.
For example, an Organizer could update a calendar invite in the Calendar Client and save it due to changes in weather, emergency, promotional, date, time, and location more than once. An updated calendar invitation would then be sent automatically for Y or M customers and tracked for new Calendar Invitation receipts.
There is an option to send the UPDATED Calendar Invite to a Que for approval prior to sending it out as an option.
How the Calendar Invite Cancel works if a Customer has received a Calendar Invite for that event from the AWS Calendar Invite Server
Suppose the Organizer Cancels the Calendar Invite in the Calendar Client, and the event has the status of “already sent” in the AWS Calendar Invite Server.
In that case, we automatically send the canceled Calendar Invite, matched to the UID, to customers who have received the event and selected “Yes” or “Maybe”.
Configuration Management of the AWS SES for the processing of the Inbox
In this configuration, we have chosen to open it to anyone who can send an email to create@calendarsnack.com and receive a notification. In this use case, it is configured as a service application for demo testing.
Anyone who sends a calendar invitation to the create@calendarsnack.com address will receive a notification back to the Organizers’ email address of the Calendar Client with instructions that the calendar invitation data has been processed and is available in the application interface to generate Upcoming event pages or send the Calendar Invite to a bulk list using the APIs.
If you are a developer and have the installed version of the AWS Calendar Invite Server in your AWS environment, you will gain access to 9 APIs that enable you to retrieve data from the storage layer and present it in your application, allowing you to design a specific workflow that makes sense for your use cases.
In our case, the calendarsnack.com application is built with VUE.JS talking to the APIS using a CDN. We use Google Firebase for provisioning and application access.
The configuration for the AWS Calendar Invite Server can limit domains and email addresses through setting rules in the AWS SES configuration console.
Sending Calendar Invites in Web Embeds and Email Lists with the AWS Calendar Invite Server
Examples Above - Sending Calendar Invites from Web Embedded 1-Click Buttons
The stored Calendar Invites can be retrieved using API #1, which is an Endpoint that matches the Email to the UID and reassembles the calendar invite for sending on the AWS Calendar Invite Server using the AWS SES RAW API.
Example Above - Sending Calendar Invites from an Email List in the Browser, Upload, or a Direct API List call like AWS Pinpoint
The stored Calendar Invites can be retrieved using API #1, which is an Endpoint that matches the Email to the UID and reassembles the calendar invite for sending on the AWS Calendar Invite Server using the AWS SES RAW API.
Wrap Up and what's next..
A Calendar Client is a powerful tool that combines complex sporting schedules with built-in commands to create, update, and cancel events within the AWS Calendar Invite Server.
The Nine (9) APIs of the AWS Calendar Invite Server provide the ability to use AWS SES infrastructure to send millions of calendar invites for thousands of campaigns by building out applications with the powerful APIs and using the Leverage the Calendar Clients as powerful Campaign management for Tickets, Merch with making sure you get the Calendar Invite first.
Youtube Channel here:
https://www.youtube.com/@calendarinvite/videos
Thanks for checking us on on the first Summer Day of 2025!