Skip to content

What VendoRFP connects to.

Your calendar, your accounting software, and Zapier or Make for the rest.

Works with the tools you already use.

Calendar feedPlaced 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 for your community, from the same feed your dashboard reads, so what you see there is what your calendar gets.
Read-only APIA key opens only the 5 scopes you grant it.Switched on per account under Settings — nothing is reachable until you ask for it.
Zapier and Make8 events, each sent as a signed JSON POST to the address your Zap or scenario gives you.Settings, then Integrations: paste the address, pick the events, send a test.
Bank connectionsBank connections switch on once VendoRFP’s Plaid account is approved. Chase, Wells Fargo and other banks connect through Plaid.The screen is in Settings, then Integrations, beside the webhooks. Until then, payments you record on an invoice reach your books through the accounting export.
Accounting exports5 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 and in QuickBooks Online, QuickBooks Desktop and Xero for your books.

Your schedule in Google, Outlook or Apple Calendar

Paste one address into your calendar. Every scheduled visit appears and stays current.

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 it
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

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/community
{
  "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.

Zapier and Make

VendoRFP sends an event the moment something happens: an RFP goes out, a proposal arrives, an invoice is paid. Each one is a JSON POST to an address you choose, signed so the receiving end can prove it came from us. Zapier and Make both give you that address, so there is nothing to install.

rfp.publishedAn RFP is published to vendors.
proposal.receivedA vendor submits a proposal on one of your RFPs.
proposal.awardedA proposal is awarded.
work_order.approvedCompleted work is approved for billing.
invoice.paidAn invoice is paid in full.
work_order.completedA vendor marks a visit complete.
vote.closedA board vote closes, with its result.
coi.expiringA vendor insurance certificate is about to expire.

Set it up in Zapier

  1. In Zapier, create a Zap and choose Webhooks by Zapier as the trigger, event Catch Hook.
  2. Copy the webhook URL Zapier shows you.
  3. In VendoRFP, open Settings, then Integrations. Paste the URL, tick the events you want and press Add webhook.
  4. Copy the signing secret VendoRFP shows you once, and keep it with the Zap’s notes.
  5. Press Send test event, then Test trigger in Zapier. The test event appears and its fields are ready to map.

Set it up in Make

  1. In Make, create a scenario and add the Webhooks module Custom webhook. Press Add and name it.
  2. Copy the address Make gives you. Make now waits for the first request so it can learn the data structure.
  3. In VendoRFP, open Settings, then Integrations. Paste the address, tick the events and press Add webhook.
  4. Press Send test event. Make shows “Successfully determined” and the fields are ready for the next module.
An invoice.paid delivery, as your Zap receives it
{
  "id": "evt_3f2a9c10-58d4-4e0b-9b7a-1c2d3e4f5a6b",
  "type": "invoice.paid",
  "created_at": "2026-09-07T15:04:05.000Z",
  "organization": {
    "kind": "community",
    "id": "a1b2c3d4-0000-0000-0000-000000000000"
  },
  "data": {
    "invoice_id": "5e6f7a8b-0000-0000-0000-000000000000",
    "number": "INV-1001",
    "total": 486,
    "amount_paid": 486,
    "currency": "usd",
    "paid_at": "2026-09-07T15:04:00.000Z",
    "vendor_id": "9c8d7e6f-0000-0000-0000-000000000000",
    "community_id": "a1b2c3d4-0000-0000-0000-000000000000"
  }
}
The headers that come with it
VendoRFP-Event: invoice.paid
VendoRFP-Event-Id: evt_3f2a9c10-58d4-4e0b-9b7a-1c2d3e4f5a6b
VendoRFP-Timestamp: 1788793445
VendoRFP-Signature: v1=<HMAC-SHA256 of "<timestamp>.<body>" with your secret>

If your endpoint is down, the event waits.

A delivery that fails is tried again after 1 minute, 5 minutes, 30 minutes, 2 hours, 8 hours and 24 hours, with the same event id each time so nothing is counted twice. Every attempt is in the delivery log beside the webhook.

Your bank, through Plaid

Bank connections switch on once VendoRFP’s Plaid account is approved. Chase, Wells Fargo and other banks connect through Plaid.

Plaid connects apps to bank accounts. You choose your bank and sign in on Plaid’s own screen. VendoRFP receives your accounts’ names, their last four digits and their transactions, never your password or a full account number. Each bank payment that matches an invoice by amount and date is shown beside that invoice for you to check. A match never marks an invoice paid by itself.

Disconnecting deletes what was copied.

Disconnect a bank in Settings and its accounts and transactions are deleted from VendoRFP, and the connection is ended at Plaid. The screen is in Settings, then Integrations, beside the webhooks. Until then, payments you record on an invoice reach your books through the accounting export.

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 it
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.

Connect it to what you already run.

The file exports and the webhooks are in your dashboard the day you sign up, and the calendar feed is on this page the day you have a schedule.