Sync to Google Calendar
BuildWorkPro doesn’t ship a native Google Calendar integration via the public API — the in-app integration runs server-side, and customers who want their own pipeline build it themselves. This recipe shows the read side: pulling a unified event feed from BuildWorkPro that you can then push into Google Calendar (or Outlook, Notion, or wherever).
-
Pick a date window.
The
/calendar/eventsendpoint accepts ISO 8601startandendquery params. The window can’t exceed 366 days.Terminal window START="2026-04-25T00:00:00Z"END="2026-05-25T00:00:00Z" -
Fetch the events.
Terminal window curl -s -G https://app.buildworkpro.com/api/v1/calendar/events \-H "Authorization: Bearer ${BUILDWORKPRO_API_KEY}" \--data-urlencode "start=${START}" \--data-urlencode "end=${END}" \--data-urlencode "types=task,phase,bid"The response is a flat list of events aggregated across projects, tasks, phases, leads, bids, and activities:
{"data": [{"id": 91,"type": "task","title": "Pour foundation slab","start": "2026-05-02T13:00:00.000Z","end": "2026-05-02T17:00:00.000Z","projectId": 14,"assignedTo": 3}],"meta": { "request_id": "req_..." }} -
Push to Google Calendar.
Use Google’s Events: insert endpoint with your own OAuth token. Map BuildWorkPro fields onto Google’s payload —
title->summary,start/end->start.dateTime/end.dateTime, and put the BuildWorkProidandtypeintoextendedProperties.privateso you can reconcile on the next sync.await calendar.events.insert({calendarId: 'primary',requestBody: {summary: bwpEvent.title,start: { dateTime: bwpEvent.start, timeZone: 'America/New_York' },end: { dateTime: bwpEvent.end, timeZone: 'America/New_York' },extendedProperties: { private: { bwp_id: String(bwpEvent.id), bwp_type: bwpEvent.type } },},}); -
Schedule the sync.
Run this on a cron — every 15 minutes is a reasonable starting cadence. On each tick, query the next 30-day window. Use the
extendedPropertiesyou stored to update existing Google events instead of creating duplicates.