Integrations

What this connects to

Four connections: your service schedule in the calendar app you already keep, a read-only API, and files your bookkeeper can import without retyping anything — plus a request form a vendor can put on their own website.

File formats
5
what a bookkeeper imports, both sides of the arrangement
Read-only scopes
5
a key opens the ones you grant it and nothing else
Platform guides
7
for a vendor putting the request form on their own site, one page each
What a vendor pastes
Two lines of HTML
the same string their dashboard prints, character for character

The schedule, in your calendar

Every visit on the plan can appear beside your own days in Apple Calendar, Google Calendar or Outlook. Sign in and 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.

It is a read-only view. Dragging an event in your own calendar moves your copy and nothing else. 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.

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 pasteExample
<div data-vendorfp-proposal-form data-key="hoac_embed_your_key_here"><a href="https://vendorfp.com/embed/w/hoac_embed_your_key_here">Request a proposal</a></div>
<script src="https://vendorfp.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 read-only 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 and payment processing on their own lines.
  • rfps:readWork you have published, and how many proposals each has drawn.
  • vendors:readThe companies working for you, and whether their insurance and licences are current.

The API reads. A person in the dashboard does everything else.

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": null,
    "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 authorise 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,Payment processing,"Amount (charged on an Invoice row, paid on a Payment row)",Stored document total,Variance,Sales tax detail,Processing method,Currency

Sales tax and payment processing are their own lines, in every one of them.

They are never folded into the service charge, so an invoice row in your books says what the work cost and the lines beside it say what else was on the invoice.

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.