Home / Real Estate Agents / Contract deadline calendar: confirmed dates to Google Calendar with reminders (optional dotloop pre-fill)

Real Estate Agents problem 2: Contract deadlines live in a PDF and a sticky note

Contract deadline calendar: confirmed dates to Google Calendar with reminders (optional dotloop pre-fill)

Verified with mocksLast tested 2026-10-28 · pricing checked October 2026

After you or your transaction coordinator confirm the dates in a short form (option period, inspection, appraisal, financing, title, final walkthrough, closing), the workflow puts each one on Google Calendar as an all-day event with an email reminder 3 days before and a pop-up the day before, invites the TC, and emails a summary with an .ics file. Weekends and federal holidays are flagged, not moved: your contract decides how they count. Amendments move the existing events; a terminated deal removes them. Every morning you get a digest of what's due in the next 3 days.

The problem

A missed option or financing deadline can cost the client their earnest money or the deal. The figures below come from a vendor's count of forum comments and an industry survey.

Who it's for

US solo agents and small teams who track deadlines by hand or in a spreadsheet, with or without a transaction coordinator.

Tools and monthly cost

ToolOfficial price
Google Calendar (the deadline events and reminders)Free with a Google account or the Google Workspace plan you already have; the Calendar API has no usage fee pricing page
Resend (sends the emails)Free: 3,000 emails / month, 100 / day. Pro: $20 / month for 50,000 pricing page
dotloop (optional: pre-fills the deadline form from a loop)Premium: $34.99 / month or $344 / year (dotloop's only published price). API access needs dotloop to approve your app; Teams and Business+ are quote-only pricing page
n8nCommunity Edition: free if you self-host (you pay for the server). n8n Cloud: from EUR 20 / month (Starter) or EUR 50 (Pro) pricing page

Example month: Illustrative arithmetic. Assume 3 new contracts and 2 amendments a month: about 21 calendar events and 10 summary emails, plus 30 daily digests. Google Calendar's API has no fee and the emails fit Resend's free tier. About $0 a month plus your n8n server. dotloop is optional and only if you already use it.

Setup

  1. Create a Google Calendar for deals (or use your own), share it with your TC, and connect n8n's Google Calendar credential (OAuth). Set GCAL_CALENDAR_ID and DEADLINE_REMINDER_MINUTES if you want different reminders.
  2. Host the deadline form (included) where you and the TC can reach it; set E2_FORM_KEY (a long random string the form sends) and E2_FORM_URL. The form has a hidden company_website field: bots that fill it are ignored.
  3. Optional dotloop pre-fill: register an app with dotloop's developer program (API access needs dotloop's approval; plan requirements are quote-based), then set DOTLOOP_CLIENT_ID, DOTLOOP_CLIENT_SECRET, DOTLOOP_ACCESS_TOKEN, DOTLOOP_REFRESH_TOKEN and DOTLOOP_PROFILE_ID. Tokens expire after about 12 hours; the workflow refreshes them and retries once.
  4. Set AGENT_NAME, AGENT_FIRST, AGENT_LICENSE, AGENT_PHONE, AGENT_MOBILE, AGENT_EMAIL, AGENT_TZ, BROKERAGE_NAME, BROKERAGE_LICENSE, OFFICE_ADDRESS and EMAIL_FROM from .env.example. Every message is signed with your name, license number, brokerage, phone and office address; ask your broker what your state requires. TC_EMAIL gets the summaries and invitations.
  5. Enter one past deal with known dates and compare the calendar against the contract before you rely on it. The workflow also has a manual 'run now' webhook used by our tests. Delete it, or put it behind n8n's header authentication, before you go live.

Download

Download real-estate-contract-deadline-calendar.zip

Contains the n8n workflow, the mock data, the test runner with its last results, and the mock server we tested against. All keys in .env.example are fake.

Test result

Every workflow was imported into n8n 2.45.4 and run end to end on our test machine. Follow Up Boss, dotloop, Google Calendar, Google Sheets, Twilio and the email sender (Resend, including its inbound webhook) were replaced by a local mock server built from their official API docs: it checks the same request shapes and required fields, enforces Follow Up Boss's rate limit (HTTP 429 with Retry-After), expires dotloop's access token so the refresh path runs, and records every call. Webhook signatures (Follow Up Boss FUB-Signature, Twilio X-Twilio-Signature, Resend/Svix) are really computed and checked. These recipes use no AI model; every decision is a written rule. Leads, clients, agents, brokerages and addresses are invented. Nothing was sent to a real phone, person or account.

8/8 scenarios passed (run 2026-10-28)

PASSC2dotloop loop id without confirmation: reads the loop (token expired -> refresh -> retry), emails the TC the dates to check with a pre-filled link; no calendar writes
PASSC1Confirmed manual entry: 7 all-day events (email 3 days + popup 1 day before, agent + TC invited, sendUpdates=all), summary + .ics; Saturday and Thanksgiving flagged but not moved
PASSC3Bad input: inspection after closing, an unparseable date, and no 'confirmed' tick: nothing written, one email listing every problem
PASSC4Amendment moves closing to Dec 18: one PATCH of the existing event (no duplicate), summary shows old -> new
PASSC5Same form submitted again: no calendar calls, 'no changes' email
PASSC6Honeypot filled, then wrong form key: both ignored
PASSC7Daily digest Nov 10: lists inspection (Nov 12) only; second run the same day sends nothing
PASSC8Deal terminated: all 7 events deleted with sendUpdates=all; later digests skip it

Actual output from the test run

Scenario C1: the summary email after the dates were confirmed (invented deal). Names and numbers are invented.

Subject: Deadline calendar updated - 9 Oak Ln, Austin TX

9 Oak Ln, Austin TX

- Effective (binding) date: Mon Nov 2, 2026 added
- Earnest money due: Thu Nov 5, 2026 added
- Inspection / option period ends: Thu Nov 12, 2026 added
- Appraisal deadline: Sat Nov 21, 2026 added
- Title / survey objections due: Fri Nov 20, 2026 added
- Financing contingency ends: Thu Nov 26, 2026 added
- Closing: Fri Dec 11, 2026 added

Check these:
- Appraisal deadline falls on a Saturday (Sat Nov 21, 2026). Not moved: check how your contract counts weekends and holidays.
- Financing contingency ends falls on a federal holiday (Thanksgiving Day) (Thu Nov 26, 2026). Not moved: check how your contract counts weekends and holidays.

Calendar invites went to jordan@example.com, tc@example.com. The attached .ics has every current deadline for anyone not on Google Calendar.
Dates come from the contract as confirmed by the team; this calendar is a reminder, not the contract.

Verified with mocks

  • Confirmed manual entry: 7 all-day events with an email reminder 3 days before and a pop-up 1 day before, agent and TC invited, plus a summary email with an .ics attachment. A Saturday deadline and Thanksgiving are flagged in the summary and left on their dates.
  • A dotloop loop id without confirmation: reads the loop (an expired token is refreshed and the call retried), emails the TC the dates to check with a pre-filled form link, and writes nothing to the calendar.
  • Bad input (inspection after closing, an unreadable date, no 'confirmed' tick): nothing written, one email listing every problem.
  • An amendment moving closing updates the existing event instead of adding a duplicate; the summary shows old and new dates. The same form sent twice changes nothing.
  • Daily digest lists only deadlines in the next 3 days and is sent once a day. A terminated deal's events are all deleted and later digests skip it.
  • Honeypot submissions and a wrong form key are ignored.
  • Verified with mocks; fictional people only.

Documented from official API docs only

Built to the vendor's documentation but not run against a live account. Check these on yours.

  • Google Calendar API events insert / patch / delete with reminders, attendees and sendUpdates (from Google's docs; tested against a mock).
  • dotloop Public API v2 loop details and the OAuth 2.0 refresh flow (from dotloop's API docs; not run against a live dotloop account, which needs an approved app).
  • US federal holiday list for flags: computed in the workflow; state holidays are not included.

Limitations

  • It never reads dates out of a contract by itself: a person types or confirms every date. That is deliberate; a misread date is worse than none.
  • Holiday and weekend handling differs by state form and contract. We flag those dates; we don't move them. Check your contract's definition of days.
  • Built for Google Calendar. Outlook, SkySlope and other transaction tools are not built.
  • Not legal advice. Your contract and your broker decide what each deadline means.