Integrations

What this connects to.

Your schedule, in the calendar app you already use — plus a request form, a read-only API, and files your bookkeeper can import.

What a vendor pastes on their own site

<div data-vendorfp-proposal-form data-key="vrfp_embed_your_key_here"><a href="https://hoacrew.com/embed/w/vrfp_embed_your_key_here">Request a proposal</a></div>
<script src="https://hoacrew.com/embed/v1.js" async></script>
Calendar feedLive. Placed visits appear in Apple Calendar, Google Calendar or Outlook and stay current; a service agreed as a frequency with no day set is named in the feed instead.One calendar address per side (community, vendor), from the same feed your dashboard reads, so what you see there is what your calendar gets.
Website request formLive. Two lines of HTML put a proposal request form on your own site.7 platform guides and one snippet, the same one your dashboard prints.
Read-only APILive. A key opens only the 5 scopes you grant it.Switched on per account under Settings — nothing is reachable until you ask for it.
Accounting exportsLive. 5 file formats, no third-party account or subscription.Built from your own ledger: the same file the download button in your dashboard gives you.

It shows up in Apple Calendar, Google Calendar and Outlook for your schedule, on WordPress, Squarespace, Wix, Webflow, Shopify, A plain HTML site and React or Next.js for the request form, and in QuickBooks Online, QuickBooks Desktop and Xero for your books.

The schedule, in your calendar

Every visit on the plan can appear beside your own days in Apple Calendar, Google Calendar or Outlook. Copy the address below, paste it in once, and the calendar keeps itself current — a service day that moves next month moves in your calendar too, with nothing to re-import.

Visits nobody has agreed to yet arrive marked tentative, so a proposal never lands in your week looking like a commitment.

One visit, as the feed writes itExample
BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//VendoRFP//Service schedule feed//EN
CALSCALE:GREGORIAN
X-WR-CALNAME:Willow Creek — service schedule
REFRESH-INTERVAL;VALUE=DURATION:PT12H
X-PUBLISHED-TTL:PT12H
BEGIN:VEVENT
UID:schedule-8f2c-2026-09-07@vendorfp.com
DTSTAMP:20260907T060000Z
DTSTART;VALUE=DATE:20260907
DTEND;VALUE=DATE:20260908
SUMMARY:Pool Cleaning
DESCRIPTION:Vendor: Blue Water Pools\nWindow: 7:00 – 11:00 AM
STATUS:CONFIRMED
TRANSP:TRANSPARENT
END:VEVENT
END:VCALENDAR

A service under contract with no day set stays off the calendar, on purpose.

Work is often agreed as a frequency (three visits a week) without anybody naming which days. Spreading that across Monday, Wednesday and Friday would put three dates in your calendar that nobody agreed to, so the feed names the service in the calendar’s own description instead and waits for a day to be set.

See this schedule in your own calendar

Add this address to Apple Calendar, Google Calendar or Outlook and every visit on the plan appears beside your own days. It updates itself.

Masked example. Sign in for yours.

Sign in to get yours

If you’re the company doing the work, you get the same address for the opposite side of it: every visit your business is on, across every community you’re contracted with, in one calendar — whatever mix of time zones those communities keep.

The same visit, on the vendor's calendarExample
BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//VendoRFP//Service schedule feed//EN
CALSCALE:GREGORIAN
X-WR-CALNAME:Blue Water Pools — service visits
REFRESH-INTERVAL;VALUE=DURATION:PT12H
X-PUBLISHED-TTL:PT12H
BEGIN:VEVENT
UID:schedule-8f2c-2026-09-07@vendorfp.com
DTSTAMP:20260907T060000Z
DTSTART;VALUE=DATE:20260907
DTEND;VALUE=DATE:20260908
SUMMARY:Pool Cleaning — Willow Creek
DESCRIPTION:Window: 7:00 – 11:00 AM
STATUS:CONFIRMED
END:VEVENT
END:VCALENDAR

Free for the board, busy for the crew

A board member’s copy marks a visit free, so it never blocks their own availability elsewhere for work somebody else is showing up to do. The vendor’s copy marks the same visit busy — because they’re the one who has to be there — and names the community in the summary, because a crew working several of them can’t tell one Tuesday pool visit from another by trade alone.

See your own visits in your calendar

Add this address to your crew's calendar and every visit your company is on, across every community you work, shows up in one place. It updates itself.

Masked example. Sign in for yours.

Sign in to get yours

A request form on your own site

Run a service company? Two lines of HTML put a proposal request form on your own website. Somebody reading your services page asks you for a proposal without leaving it, and the request arrives in your dashboard addressed to your company alone.

What you paste
<div data-vendorfp-proposal-form data-key="vrfp_embed_your_key_here"><a href="https://hoacrew.com/embed/w/vrfp_embed_your_key_here">Request a proposal</a></div>
<script src="https://hoacrew.com/embed/v1.js" async></script>

Each website builder gets its own page below: the three steps for that builder, and the exact menu item you are looking for.

One of those two lines is a <script> tag, which means it is somebody else’s code running on your website. There is a whole guide on what that code can reach, what it records and where the edges are, and it is written to be forwarded to whoever asks.

The API

If you have somebody who writes software (in-house, or the firm that keeps your systems talking to each other), they can read your own records straight out of the platform. A key is issued to you, you choose which of the areas below it opens, and it opens no others.

community:readThe record of the place itself — its name, address, and the boundary mapped for it.
work_orders:readService visits: what was done, when, and what it cost you.
invoices:readInvoices and their line items, with sales tax as its own line.
rfps:readWork you have published, and how many proposals each has drawn.
vendors:readThe companies working for you, and whether their insurance and licenses are current.

What a key cannot do

The public API is read-only. Anything that commits money, awards work, or changes a record is done by a person in the dashboard, where the approval it needs exists.
GET /api/v1/public/communityExample
{
  "data": {
    "id": "a1b2c3d4-0000-0000-0000-000000000000",
    "name": "Willow Creek",
    "address": "4200 Willow Creek Dr, Charlotte, NC",
    "lat": 35.1596,
    "lng": -80.8392,
    "msa_signed": true,
    "boundary": {
      "type": "Polygon",
      "coordinates": [
        [
          [
            -80.8409,
            35.1583
          ],
          [
            -80.8375,
            35.1583
          ],
          [
            -80.8375,
            35.1609
          ],
          [
            -80.8409,
            35.1609
          ],
          [
            -80.8409,
            35.1583
          ]
        ]
      ]
    },
    "created_at": "2026-01-14T00:00:00.000Z"
  }
}

API access is switched on per account rather than being on by default, because a key that reads your records is not a thing to hand out by accident. The ask lives in your dashboard under Settings, on the same page the keys will appear on once it is open — tell us what you want to read and somebody reads the request.

Files for your books

Pick a period, pick a format, download it. Every one of these opens in the package it names without a third-party account, a connector to authorize or a subscription in between — the file is yours and the import is the one your accounting package already has.

Detailed CSVEvery invoice and payment for the period, one row each, with tax broken out. Opens in any spreadsheet.
General journal CSV (double-entry)A double-entry journal — debits and credits, totalling equal. The one to hand an accountant who wants "the journal".
QuickBooks Online CSVQuickBooks Online's own import columns.
QuickBooks Desktop IIFThe file format QuickBooks Desktop imports directly.
Xero CSVXero's own import columns.
The header row, as the file writes itExample
Record type,Date,Due date,Document number,Billed by,PO number,Status,Service,Sales tax,"Amount (charged on an Invoice row, paid on a Payment row)",Stored document total,Variance,Sales tax detail,Currency

Sales tax is its own line, in every one of them.

It is never folded into the service charge, so an invoice row in your books says what the work cost and the line beside it says what tax was on the invoice.

Every one of these lives in your dashboard under Settings.

Integrations

Connect it to what you already run.

The file exports are in your dashboard the day you have an invoice, and the calendar feed is on this page the day you have a schedule. The request form for your own website is a page of instructions and two lines of HTML.