Skip to main content

Command Palette

Search for a command to run...

How I Use AI to Completely Automate My Conference Tracking (and Never Miss an Early Bird Ticket Again)

Updated
7 min readView as Markdown
A
Founder and CEO of Play Action Live Inc.

If you attend conferences, trade shows, or industry events, you know the struggle. You hear about a great event, bookmark the website, and tell yourself you’ll check back later when tickets go on sale. Fast forward six months, and you’ve either completely forgotten about it, or you missed the early-bird pricing.

I got tired of managing a chaotic list of bookmarks and calendar reminders, so I built an automated system using AI, Google Sheets, and Google Calendar.

Now, when I find a conference I want to attend, I just feed the URL to an AI, paste the results into a Google Sheet, and click a button. The system automatically blocks out the dates on my calendar and sets up color-coded reminders 6 months, 3 months, and 1 month before the event so I can book flights, pitch speaking sessions, or buy tickets.

Here is exactly how my system works, and how you can build it for yourself in about 10 minutes.

The Magic Workflow

  1. The AI Scraper: When I find a conference I’m interested in, I don't waste time typing out the details. I just paste the URL into an AI and ask it to extract the data into a specific, copy-pasteable format.

  2. The Tracker: I paste that row of data into my "Conference List" Google Sheet.

  3. The Sync: I click a custom "Sync to Calendar" button at the top of my spreadsheet.

  4. The Result: The script reads the sheet. If the dates are confirmed, it creates a multi-day event on my calendar. Whether the dates are confirmed or "TBA" (based on last year's dates), it automatically creates a 6-month (Blue), 3-month (Yellow), and 1-month (Red) reminder on my calendar with a link to the website.

If a conference date changes, or a "TBA" event gets officially announced, I just update the spreadsheet and hit sync again. The script automatically finds the old calendar events, updates them, and adjusts the reminders.


How to Build It Yourself

You don't need to know how to code to set this up. Just follow these steps!

Step 1: Set Up Your Google Sheet

Create a new Google Sheet and name the first tab Conference List. Add the following headers to row 1, from Column A to Column N:

  • A: Conference Name

  • B: Website

  • C: Dates (e.g., Jan 23-24)

  • D: Year

  • E: Status (Leave blank, or type "TBA")

  • F: Location

  • G: Category

  • H: Main Topic/Theme

  • I: Cost / Ticket Price

  • J: Notes

  • K: Main Event ID

  • L: 6M Reminder ID

  • M: 3M Reminder ID

  • N: 1M Reminder ID

Pro-tip: Highlight columns K, L, M, and N, right-click, and select "Hide columns". The script needs these columns to remember your calendar events so it doesn't create duplicates, but you never actually need to look at them!

Step 2: Create Your AI Prompt for Data Entry

To make adding conferences effortless, save this prompt in a notepad. Whenever you find a new conference, paste this prompt along with the URL into your favorite AI:

"I am tracking conferences in a spreadsheet. Please scan this URL and extract the following information: Conference Name, Website URL, Dates (Format like 'Jan 23-24' or 'TBA'), Year, Status ('TBA' if exact dates aren't known, otherwise leave blank), Location, Category, Main Topic/Theme, Cost/Ticket Price, and any helpful Notes. Output this strictly as a single line of tab-separated values so I can easily copy and paste it directly into a single row in Google Sheets."

Step 3: Get Your Google Calendar ID

  1. Open Google Calendar on your computer.

  2. On the left side, find the calendar you want to sync to, click the three dots next to it, and select Settings and sharing.

  3. Scroll down to the "Integrate calendar" section.

  4. Copy the Calendar ID (it usually looks like your email address, or a long string of letters and numbers ending in @group.calendar.google.com).

Step 4: Add the Automation Script

Now for the magic.

  1. In your Google Sheet, click Extensions > Apps Script.

  2. Delete any code in the editor and paste the code provided below.

  3. Look at line 10 in the code: var calendarId = 'YOUR_CALENDAR_ID_HERE';

  4. Replace YOUR_CALENDAR_ID_HERE with the Calendar ID you copied in Step 3.

  5. Click the Save icon (the floppy disk).

function onOpen() {
  var ui = SpreadsheetApp.getUi();
  ui.createMenu('📅 Calendar Sync')
      .addItem('Sync to Calendar', 'syncConferencesToCalendar')
      .addToUi();
}

function syncConferencesToCalendar() {
  // REPLACE THIS WITH YOUR ACTUAL CALENDAR ID
  var calendarId = 'YOUR_CALENDAR_ID_HERE';
  var calendar = CalendarApp.getCalendarById(calendarId);
  
  if (!calendar) {
    SpreadsheetApp.getUi().alert('Error: Could not find the calendar. Please verify the Calendar ID.');
    return;
  }

  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Conference List');
  var data = sheet.getDataRange().getValues();
  
  var updatedCount = 0;
  var createdCount = 0;
  var deletedCount = 0;

  for (var i = 1; i < data.length; i++) {
    var row = data[i];
    
    var title = row[0];        
    var website = row[1];      
    var dateString = row[2];   
    var yearString = row[3];   
    var status = row[4];       
    var location = row[5];     
    var description = row[9];  
    
    var mainEventId = row[10]; 
    var rem6mId = row[11];     
    var rem3mId = row[12];     
    var rem1mId = row[13];     

    if (!title || !dateString || !yearString) continue;

    var isTBA = (status === 'TBA' || dateString.toString().indexOf('*') > -1 || yearString.toString().indexOf('*') > -1);

    var cleanDateStr = dateString.toString().replace(/\*/g, '').trim();
    var cleanYearStr = yearString.toString().replace(/\*/g, '').trim();
    
    var startDate, endDate;
    
    if (cleanDateStr.indexOf('-') > -1) {
      var parts = cleanDateStr.split('-');
      var startPart = parts[0].trim();
      var endPart = parts[1].trim();
      
      if (/^\d+$/.test(endPart)) {
        var startMonth = startPart.replace(/[^a-zA-Z]/g, '').trim();
        endPart = startMonth + ' ' + endPart;
      }
      
      startDate = new Date(startPart + ', ' + cleanYearStr);
      endDate = new Date(endPart + ', ' + cleanYearStr);
      endDate.setDate(endDate.getDate() + 1);
    } else {
      startDate = new Date(cleanDateStr + ', ' + cleanYearStr);
      endDate = null; 
    }
    
    if (isNaN(startDate.getTime())) continue;

    var rem6mDate = new Date(startDate.getTime());
    rem6mDate.setMonth(rem6mDate.getMonth() - 6);
    var rem6mTitle = '6mo Reminder - ' + title;
    
    var rem3mDate = new Date(startDate.getTime());
    rem3mDate.setMonth(rem3mDate.getMonth() - 3);
    var rem3mTitle = '3mo Reminder - ' + title;
    
    var rem1mDate = new Date(startDate.getTime());
    rem1mDate.setMonth(rem1mDate.getMonth() - 1);
    var rem1mTitle = '1mo Reminder - ' + title;

    var reminderDesc = website ? website : 'No website provided';

    function handleEvent(eventId, evTitle, evStart, evEnd, evLoc, evDesc, colIndex, evColor) {
      try {
        if (eventId) {
          var existingEvent = calendar.getEventById(eventId);
          if (existingEvent) {
            existingEvent.setTitle(evTitle);
            if (evEnd) {
              existingEvent.setAllDayDates(evStart, evEnd);
            } else {
              existingEvent.setAllDayDate(evStart);
            }
            existingEvent.setLocation(evLoc || '');
            existingEvent.setDescription(evDesc || '');
            if (evColor) existingEvent.setColor(evColor);
            updatedCount++;
            return;
          }
        }
        
        var newEvent;
        var options = { location: evLoc || '', description: evDesc || '' };
        
        if (evEnd) {
          newEvent = calendar.createAllDayEvent(evTitle, evStart, evEnd, options);
        } else {
          newEvent = calendar.createAllDayEvent(evTitle, evStart, options);
        }
        
        if (evColor) newEvent.setColor(evColor);
        sheet.getRange(i + 1, colIndex).setValue(newEvent.getId());
        createdCount++;
        
      } catch (e) {
        Logger.log('Error on row ' + (i + 1) + ': ' + e.message);
      }
    }

    if (!isTBA) {
      handleEvent(mainEventId, title, startDate, endDate, location, description, 11, null); 
    } else {
      if (mainEventId) {
        try {
          var existingMainEvent = calendar.getEventById(mainEventId);
          if (existingMainEvent) {
            existingMainEvent.deleteEvent();
            deletedCount++;
          }
          sheet.getRange(i + 1, 11).clearContent();
        } catch (e) {}
      }
    }

    handleEvent(rem6mId, rem6mTitle, rem6mDate, null, '', reminderDesc, 12, CalendarApp.EventColor.PALE_BLUE); 
    handleEvent(rem3mId, rem3mTitle, rem3mDate, null, '', reminderDesc, 13, CalendarApp.EventColor.YELLOW); 
    handleEvent(rem1mId, rem1mTitle, rem1mDate, null, '', reminderDesc, 14, CalendarApp.EventColor.RED); 
  }
  
  SpreadsheetApp.getUi().alert('Sync Complete!\n\nCreated: ' + createdCount + '\nUpdated: ' + updatedCount + '\nDeleted: ' + deletedCount + ' (Changed to TBA)');
}

Step 5: Run It!

Close the Apps Script tab and refresh your Google Sheet. You will now see a brand new menu item at the top of your screen called 📅 Calendar Sync.

Paste your first conference into the sheet, click 📅 Calendar Sync > Sync to Calendar, grant the one-time Google permissions, and watch your calendar instantly populate with your events and perfectly timed reminders.

Happy networking reminders!