Zapier setup

You do not need to write any code to wire HomeDash into Zapier. Pick whichever flow fits your goal — you can use both at once if you like.

Flow A — receive HomeDash events into Zapier

HomeDash will POST JSON to a unique Zapier URL whenever the event you subscribed to fires. Zapier turns that into a trigger you can chain to any of its 7,000+ apps.

1

In Zapier: create a Zap with the Webhooks trigger

  1. Click Create → New Zap.
  2. For the trigger app pick Webhooks by Zapier.
  3. Choose the Catch Hook event.
  4. Copy the Custom Webhook URL Zapier shows you. It looks like https://hooks.zapier.com/hooks/catch/12345/abcde/. Keep this tab open.
2

In HomeDash: register that URL

  1. Go to Dashboard → Developer → Webhooks.
  2. Click Add endpoint, paste the Zapier URL.
  3. Tick the events you want this Zap to react to (you can change later).
  4. Save. HomeDash shows a signing secret — you can ignore it for Zapier (Zapier validates the URL itself).
3

Send a test delivery

  1. Back in HomeDash, click the Test button on your new endpoint.
  2. Pick any event from the dropdown. HomeDash will send a sample payload to Zapier marked with _test: true.
  3. Switch to Zapier and click Test trigger. You should see your sample arrive.
4

Build the action

Add any Zapier action: write a Google Sheet row, post a Slack message, create a calendar event, send an email… Each event payload exposes useful fields to map (property names, amounts, dates, etc.). See the per-event Zap ideas below for inspiration.

Per-event Zap ideas and exact payloads

Rent overdue

rent.overdue

Fired when scheduled rent is past its due date and still unpaid.

Zap idea: Add a row to a Google Sheet labelled "Late rent" and notify a Slack channel.
Show example payload
JSON
{
  "id": "evt_00000000-0000-4000-8000-000000000000",
  "event": "rent.overdue",
  "created_at": "2026-01-15T10:30:00.000Z",
  "landlord_id": "11111111-1111-4111-8111-111111111111",
  "_test": true,
  "data": {
    "_test": true,
    "rent_payment_id": "rent_test_1",
    "contract_id": "contract_test_1",
    "property_id": "property_test_1",
    "property_name": "12 Test Street",
    "amount": 1200,
    "due_date": "2026-01-01",
    "days_overdue": 7
  }
}

Contract expiring

contract.expiring

Fired ahead of a contract end date so you can prompt for renewal.

Zap idea: Create a Trello card 60 days before the end date so you remember to renew.
Show example payload
JSON
{
  "id": "evt_00000000-0000-4000-8000-000000000000",
  "event": "contract.expiring",
  "created_at": "2026-01-15T10:30:00.000Z",
  "landlord_id": "11111111-1111-4111-8111-111111111111",
  "_test": true,
  "data": {
    "_test": true,
    "contract_id": "contract_test_1",
    "property_id": "property_test_1",
    "property_name": "12 Test Street",
    "end_date": "2026-03-01",
    "days_until_expiry": 30
  }
}

Contract created

contract.created

Fired when a new contract is added to a property.

Zap idea: Send a welcome email to the new tenant via Gmail.
Show example payload
JSON
{
  "id": "evt_00000000-0000-4000-8000-000000000000",
  "event": "contract.created",
  "created_at": "2026-01-15T10:30:00.000Z",
  "landlord_id": "11111111-1111-4111-8111-111111111111",
  "_test": true,
  "data": {
    "_test": true,
    "contract_id": "contract_test_1",
    "property_id": "property_test_1",
    "property_name": "12 Test Street",
    "tenancy_id": "tenancy_test_1",
    "main_tenant_id": "tenant_test_1",
    "status": "Active",
    "start_date": "2026-01-01",
    "end_date": null,
    "rent_amount": 1500
  }
}

Contract updated

contract.updated

Fired when an existing contract is updated.

Zap idea:
Show example payload
JSON
{
  "id": "evt_00000000-0000-4000-8000-000000000000",
  "event": "contract.updated",
  "created_at": "2026-01-15T10:30:00.000Z",
  "landlord_id": "11111111-1111-4111-8111-111111111111",
  "_test": true,
  "data": {
    "_test": true,
    "contract_id": "contract_test_1",
    "property_id": "property_test_1",
    "property_name": "12 Test Street",
    "tenancy_id": "tenancy_test_1",
    "main_tenant_id": "tenant_test_1",
    "status": "Active",
    "start_date": "2026-01-01",
    "end_date": "2027-01-01",
    "rent_amount": 1575
  }
}

Contract deleted

contract.deleted

Fired when a contract is deleted.

Zap idea:
Show example payload
JSON
{
  "id": "evt_00000000-0000-4000-8000-000000000000",
  "event": "contract.deleted",
  "created_at": "2026-01-15T10:30:00.000Z",
  "landlord_id": "11111111-1111-4111-8111-111111111111",
  "_test": true,
  "data": {
    "_test": true,
    "contract_id": "contract_test_1",
    "property_id": "property_test_1",
    "property_name": "12 Test Street",
    "tenancy_id": "tenancy_test_1",
    "main_tenant_id": "tenant_test_1",
    "status": "Deleted",
    "start_date": "2026-01-01",
    "end_date": "2027-01-01",
    "deleted_at": "2026-02-01T10:00:00.000Z"
  }
}

Contract ended

contract.ended

Fired when a contract transitions to the Ended state.

Zap idea: Move the property card on a Notion board to "Available".
Show example payload
JSON
{
  "id": "evt_00000000-0000-4000-8000-000000000000",
  "event": "contract.ended",
  "created_at": "2026-01-15T10:30:00.000Z",
  "landlord_id": "11111111-1111-4111-8111-111111111111",
  "_test": true,
  "data": {
    "_test": true,
    "contract_id": "contract_test_1",
    "property_id": "property_test_1",
    "property_name": "12 Test Street",
    "status": "Ended",
    "start_date": "2025-01-01",
    "end_date": "2026-01-01"
  }
}

Maintenance issue created

maintenance.created

Fired when a tenant or staff member opens a new maintenance issue.

Zap idea: Create a ticket in your existing helpdesk (Zendesk, Freshdesk, etc.).
Show example payload
JSON
{
  "id": "evt_00000000-0000-4000-8000-000000000000",
  "event": "maintenance.created",
  "created_at": "2026-01-15T10:30:00.000Z",
  "landlord_id": "11111111-1111-4111-8111-111111111111",
  "_test": true,
  "data": {
    "_test": true,
    "issue_id": "issue_test_1",
    "property_id": "property_test_1",
    "property_name": "12 Test Street",
    "title": "Leaking tap",
    "description": "Tap is leaking under the sink",
    "priority": "Medium",
    "status": "Open"
  }
}

Maintenance issue updated

maintenance.updated

Fired when a maintenance issue changes state or details.

Zap idea:
Show example payload
JSON
{
  "id": "evt_00000000-0000-4000-8000-000000000000",
  "event": "maintenance.updated",
  "created_at": "2026-01-15T10:30:00.000Z",
  "landlord_id": "11111111-1111-4111-8111-111111111111",
  "_test": true,
  "data": {
    "_test": true,
    "issue_id": "issue_test_1",
    "property_id": "property_test_1",
    "property_name": "12 Test Street",
    "title": "Leaking tap",
    "description": "Plumber scheduled for next week",
    "priority": "High",
    "status": "In_Progress"
  }
}

Maintenance issue deleted

maintenance.deleted

Fired when a maintenance issue is deleted.

Zap idea:
Show example payload
JSON
{
  "id": "evt_00000000-0000-4000-8000-000000000000",
  "event": "maintenance.deleted",
  "created_at": "2026-01-15T10:30:00.000Z",
  "landlord_id": "11111111-1111-4111-8111-111111111111",
  "_test": true,
  "data": {
    "_test": true,
    "issue_id": "issue_test_1",
    "property_id": "property_test_1",
    "property_name": "12 Test Street",
    "title": "Leaking tap",
    "priority": "High",
    "status": "Deleted",
    "deleted_at": "2026-02-01T10:00:00.000Z"
  }
}

Inspection scheduled

inspection.scheduled

Fired when an inspection is booked into the calendar.

Zap idea: Add the inspection to your Google Calendar.
Show example payload
JSON
{
  "id": "evt_00000000-0000-4000-8000-000000000000",
  "event": "inspection.scheduled",
  "created_at": "2026-01-15T10:30:00.000Z",
  "landlord_id": "11111111-1111-4111-8111-111111111111",
  "_test": true,
  "data": {
    "_test": true,
    "inspection_id": "insp_test_1",
    "property_id": "property_test_1",
    "property_name": "12 Test Street",
    "inspection_date": "2026-02-01",
    "inspection_type": "routine",
    "status": "in_progress"
  }
}

Inspection updated

inspection.updated

Fired when an inspection is updated.

Zap idea:
Show example payload
JSON
{
  "id": "evt_00000000-0000-4000-8000-000000000000",
  "event": "inspection.updated",
  "created_at": "2026-01-15T10:30:00.000Z",
  "landlord_id": "11111111-1111-4111-8111-111111111111",
  "_test": true,
  "data": {
    "_test": true,
    "inspection_id": "insp_test_1",
    "property_id": "property_test_1",
    "property_name": "12 Test Street",
    "inspection_date": "2026-02-01",
    "inspection_type": "routine",
    "status": "in_progress",
    "landlord_actions": "Arrange follow-up visit"
  }
}

Inspection deleted

inspection.deleted

Fired when an inspection is deleted.

Zap idea:
Show example payload
JSON
{
  "id": "evt_00000000-0000-4000-8000-000000000000",
  "event": "inspection.deleted",
  "created_at": "2026-01-15T10:30:00.000Z",
  "landlord_id": "11111111-1111-4111-8111-111111111111",
  "_test": true,
  "data": {
    "_test": true,
    "inspection_id": "insp_test_1",
    "property_id": "property_test_1",
    "property_name": "12 Test Street",
    "inspection_date": "2026-02-01",
    "inspection_type": "routine",
    "status": "deleted",
    "deleted_at": "2026-02-01T10:00:00.000Z"
  }
}

Inspection completed

inspection.completed

Fired when an inspection is marked complete and the report is available.

Zap idea: Post the report summary to a private Slack channel.
Show example payload
JSON
{
  "id": "evt_00000000-0000-4000-8000-000000000000",
  "event": "inspection.completed",
  "created_at": "2026-01-15T10:30:00.000Z",
  "landlord_id": "11111111-1111-4111-8111-111111111111",
  "_test": true,
  "data": {
    "_test": true,
    "inspection_id": "insp_test_1",
    "property_id": "property_test_1",
    "property_name": "12 Test Street",
    "inspection_date": "2026-02-01",
    "inspection_type": "routine",
    "status": "completed"
  }
}

Property created

property.created

Fired when a property record is created.

Zap idea:
Show example payload
JSON
{
  "id": "evt_00000000-0000-4000-8000-000000000000",
  "event": "property.created",
  "created_at": "2026-01-15T10:30:00.000Z",
  "landlord_id": "11111111-1111-4111-8111-111111111111",
  "_test": true,
  "data": {
    "_test": true,
    "property_id": "property_test_1",
    "address": "12 Test Street",
    "short_name": "Test House",
    "status": "Vacant",
    "rent_amount": 1500,
    "city": "London",
    "postcode": "SW1A 1AA"
  }
}

Property updated

property.updated

Fired when a property record is updated.

Zap idea:
Show example payload
JSON
{
  "id": "evt_00000000-0000-4000-8000-000000000000",
  "event": "property.updated",
  "created_at": "2026-01-15T10:30:00.000Z",
  "landlord_id": "11111111-1111-4111-8111-111111111111",
  "_test": true,
  "data": {
    "_test": true,
    "property_id": "property_test_1",
    "address": "12 Test Street",
    "short_name": "Test House",
    "status": "Occupied",
    "rent_amount": 1575,
    "city": "London",
    "postcode": "SW1A 1AA"
  }
}

Property deleted

property.deleted

Fired when a property record is deleted.

Zap idea:
Show example payload
JSON
{
  "id": "evt_00000000-0000-4000-8000-000000000000",
  "event": "property.deleted",
  "created_at": "2026-01-15T10:30:00.000Z",
  "landlord_id": "11111111-1111-4111-8111-111111111111",
  "_test": true,
  "data": {
    "_test": true,
    "property_id": "property_test_1",
    "address": "12 Test Street",
    "short_name": "Test House",
    "status": "Deleted",
    "deleted_at": "2026-02-01T10:00:00.000Z"
  }
}

Tenant created

tenant.created

Fired when a tenant record is created.

Zap idea:
Show example payload
JSON
{
  "id": "evt_00000000-0000-4000-8000-000000000000",
  "event": "tenant.created",
  "created_at": "2026-01-15T10:30:00.000Z",
  "landlord_id": "11111111-1111-4111-8111-111111111111",
  "_test": true,
  "data": {
    "_test": true,
    "tenant_id": "tenant_test_1",
    "property_id": "property_test_1",
    "first_name": "Alex",
    "last_name": "Tenant",
    "email": "alex.tenant@example.com",
    "phone": "+447700900000",
    "status": "INVITED"
  }
}

Tenant updated

tenant.updated

Fired when a tenant record is updated.

Zap idea:
Show example payload
JSON
{
  "id": "evt_00000000-0000-4000-8000-000000000000",
  "event": "tenant.updated",
  "created_at": "2026-01-15T10:30:00.000Z",
  "landlord_id": "11111111-1111-4111-8111-111111111111",
  "_test": true,
  "data": {
    "_test": true,
    "tenant_id": "tenant_test_1",
    "property_id": "property_test_1",
    "first_name": "Alex",
    "last_name": "Tenant",
    "email": "alex.tenant@example.com",
    "phone": "+447700900001",
    "status": "ACTIVE"
  }
}

Tenant deleted

tenant.deleted

Fired when a tenant record is deleted.

Zap idea:
Show example payload
JSON
{
  "id": "evt_00000000-0000-4000-8000-000000000000",
  "event": "tenant.deleted",
  "created_at": "2026-01-15T10:30:00.000Z",
  "landlord_id": "11111111-1111-4111-8111-111111111111",
  "_test": true,
  "data": {
    "_test": true,
    "tenant_id": "tenant_test_1",
    "property_id": "property_test_1",
    "first_name": "Alex",
    "last_name": "Tenant",
    "email": "alex.tenant@example.com",
    "status": "DELETED",
    "deleted_at": "2026-02-01T10:00:00.000Z"
  }
}

Contact created

contact.created

Fired when a contact is created.

Zap idea:
Show example payload
JSON
{
  "id": "evt_00000000-0000-4000-8000-000000000000",
  "event": "contact.created",
  "created_at": "2026-01-15T10:30:00.000Z",
  "landlord_id": "11111111-1111-4111-8111-111111111111",
  "_test": true,
  "data": {
    "_test": true,
    "contact_id": "contact_test_1",
    "name": "Ace Plumbing",
    "company": "Ace Ltd",
    "email": "ace@example.com",
    "mobile": "+447700900100",
    "categories": [
      "Plumbing"
    ]
  }
}

Contact updated

contact.updated

Fired when a contact is updated.

Zap idea:
Show example payload
JSON
{
  "id": "evt_00000000-0000-4000-8000-000000000000",
  "event": "contact.updated",
  "created_at": "2026-01-15T10:30:00.000Z",
  "landlord_id": "11111111-1111-4111-8111-111111111111",
  "_test": true,
  "data": {
    "_test": true,
    "contact_id": "contact_test_1",
    "name": "Ace Plumbing",
    "company": "Ace Services Ltd",
    "email": "ace@example.com",
    "mobile": "+447700900100",
    "categories": [
      "Plumbing",
      "Emergency"
    ]
  }
}

Contact deleted

contact.deleted

Fired when a contact is deleted.

Zap idea:
Show example payload
JSON
{
  "id": "evt_00000000-0000-4000-8000-000000000000",
  "event": "contact.deleted",
  "created_at": "2026-01-15T10:30:00.000Z",
  "landlord_id": "11111111-1111-4111-8111-111111111111",
  "_test": true,
  "data": {
    "_test": true,
    "contact_id": "contact_test_1",
    "name": "Ace Plumbing",
    "company": "Ace Services Ltd",
    "deleted_at": "2026-02-01T10:00:00.000Z"
  }
}

Chat message sent

chat.message_sent

Fired when a landlord sends a chat message.

Zap idea:
Show example payload
JSON
{
  "id": "evt_00000000-0000-4000-8000-000000000000",
  "event": "chat.message_sent",
  "created_at": "2026-01-15T10:30:00.000Z",
  "landlord_id": "11111111-1111-4111-8111-111111111111",
  "_test": true,
  "data": {
    "_test": true,
    "message_id": "message_test_1",
    "chat_id": "chat_test_1",
    "property_id": "property_test_1",
    "tenant_id": "tenant_test_1",
    "text": "Hello, the contractor will visit tomorrow.",
    "attachment_type": null,
    "attachment_name": null,
    "sent_at": "2026-02-01T10:00:00.000Z"
  }
}

Mortgage created

mortgage.created

Fired when a mortgage is created.

Zap idea:
Show example payload
JSON
{
  "id": "evt_00000000-0000-4000-8000-000000000000",
  "event": "mortgage.created",
  "created_at": "2026-01-15T10:30:00.000Z",
  "landlord_id": "11111111-1111-4111-8111-111111111111",
  "_test": true,
  "data": {
    "_test": true,
    "mortgage_id": "mortgage_test_1",
    "lender": "Test Bank",
    "reference": "M-001",
    "balance": 250000,
    "interest_rate": 4.25,
    "monthly_payment": 1200,
    "property_ids": [
      "property_test_1"
    ],
    "status": "Active"
  }
}

Mortgage updated

mortgage.updated

Fired when a mortgage is updated.

Zap idea:
Show example payload
JSON
{
  "id": "evt_00000000-0000-4000-8000-000000000000",
  "event": "mortgage.updated",
  "created_at": "2026-01-15T10:30:00.000Z",
  "landlord_id": "11111111-1111-4111-8111-111111111111",
  "_test": true,
  "data": {
    "_test": true,
    "mortgage_id": "mortgage_test_1",
    "lender": "Test Bank",
    "reference": "M-001",
    "balance": 245000,
    "interest_rate": 4.1,
    "monthly_payment": 1185,
    "property_ids": [
      "property_test_1"
    ],
    "status": "Active"
  }
}

Mortgage deleted

mortgage.deleted

Fired when a mortgage is deleted.

Zap idea:
Show example payload
JSON
{
  "id": "evt_00000000-0000-4000-8000-000000000000",
  "event": "mortgage.deleted",
  "created_at": "2026-01-15T10:30:00.000Z",
  "landlord_id": "11111111-1111-4111-8111-111111111111",
  "_test": true,
  "data": {
    "_test": true,
    "mortgage_id": "mortgage_test_1",
    "lender": "Test Bank",
    "reference": "M-001",
    "balance": 245000,
    "property_ids": [
      "property_test_1"
    ],
    "status": "Deleted",
    "deleted_at": "2026-02-01T10:00:00.000Z"
  }
}

Rent created

rent.created

Fired when a rent payment is created.

Zap idea:
Show example payload
JSON
{
  "id": "evt_00000000-0000-4000-8000-000000000000",
  "event": "rent.created",
  "created_at": "2026-01-15T10:30:00.000Z",
  "landlord_id": "11111111-1111-4111-8111-111111111111",
  "_test": true,
  "data": {
    "_test": true,
    "rent_payment_id": "rent_test_1",
    "contract_id": "contract_test_1",
    "property_id": "property_test_1",
    "tenant_id": "tenant_test_1",
    "amount": 1500,
    "due_date": "2026-02-05",
    "status": "Pending",
    "period": "monthly"
  }
}

Rent updated

rent.updated

Fired when a rent payment is updated.

Zap idea:
Show example payload
JSON
{
  "id": "evt_00000000-0000-4000-8000-000000000000",
  "event": "rent.updated",
  "created_at": "2026-01-15T10:30:00.000Z",
  "landlord_id": "11111111-1111-4111-8111-111111111111",
  "_test": true,
  "data": {
    "_test": true,
    "rent_payment_id": "rent_test_1",
    "contract_id": "contract_test_1",
    "property_id": "property_test_1",
    "tenant_id": "tenant_test_1",
    "amount": 1500,
    "due_date": "2026-02-05",
    "status": "Paid",
    "date_paid": "2026-02-06",
    "amount_received": 1500,
    "period": "monthly"
  }
}

Rent invoice sent

rent.invoice_sent

Fired when an invoice or receipt email is sent to a tenant via the public API. Delivery is asynchronous via the webhook outbox.

Zap idea: Log the send in a Google Sheet and notify your bookkeeper in Slack when an invoice goes out via the API.
Show example payload
JSON
{
  "id": "evt_00000000-0000-4000-8000-000000000000",
  "event": "rent.invoice_sent",
  "created_at": "2026-01-15T10:30:00.000Z",
  "landlord_id": "11111111-1111-4111-8111-111111111111",
  "_test": true,
  "data": {
    "_test": true,
    "rent_payment_id": "rent_test_1",
    "contract_id": "contract_test_1",
    "property_id": "property_test_1",
    "tenant_id": "tenant_test_1",
    "tenant_email": "tenant@example.com",
    "document_type": "invoice",
    "period": "February 2026",
    "amount": 1500,
    "due_date": "2026-02-05",
    "sent_via": "public_api"
  }
}

Rent due soon

rent.due_soon

Fired a few days ahead of a pending rent payment due date.

Zap idea:
Show example payload
JSON
{
  "id": "evt_00000000-0000-4000-8000-000000000000",
  "event": "rent.due_soon",
  "created_at": "2026-01-15T10:30:00.000Z",
  "landlord_id": "11111111-1111-4111-8111-111111111111",
  "_test": true,
  "data": {
    "_test": true,
    "rent_payment_id": "rent_test_1",
    "contract_id": "contract_test_1",
    "property_id": "property_test_1",
    "property_name": "12 Test Street",
    "amount": 1200,
    "due_date": "2026-01-08",
    "days_until_due": 3
  }
}

Property document created

property_document.created

Fired when a property document is uploaded.

Zap idea:
Show example payload
JSON
{
  "id": "evt_00000000-0000-4000-8000-000000000000",
  "event": "property_document.created",
  "created_at": "2026-01-15T10:30:00.000Z",
  "landlord_id": "11111111-1111-4111-8111-111111111111",
  "_test": true,
  "data": {
    "_test": true,
    "document_id": "prop_doc_test_1",
    "property_id": "property_test_1",
    "name": "EPC Certificate",
    "type": "EPC_Certificate",
    "expiry_date": "2029-01-01",
    "uploaded_at": "2026-02-01T10:00:00.000Z",
    "size_bytes": 204800
  }
}

Property document deleted

property_document.deleted

Fired when a property document is deleted.

Zap idea:
Show example payload
JSON
{
  "id": "evt_00000000-0000-4000-8000-000000000000",
  "event": "property_document.deleted",
  "created_at": "2026-01-15T10:30:00.000Z",
  "landlord_id": "11111111-1111-4111-8111-111111111111",
  "_test": true,
  "data": {
    "_test": true,
    "document_id": "prop_doc_test_1",
    "property_id": "property_test_1",
    "name": "EPC Certificate",
    "type": "EPC_Certificate",
    "deleted_at": "2026-02-01T10:00:00.000Z"
  }
}

Contract document created

contract_document.created

Fired when a contract document is uploaded.

Zap idea:
Show example payload
JSON
{
  "id": "evt_00000000-0000-4000-8000-000000000000",
  "event": "contract_document.created",
  "created_at": "2026-01-15T10:30:00.000Z",
  "landlord_id": "11111111-1111-4111-8111-111111111111",
  "_test": true,
  "data": {
    "_test": true,
    "document_id": "contract_doc_test_1",
    "contract_id": "contract_test_1",
    "property_id": "property_test_1",
    "name": "Tenancy Agreement",
    "type": "Contract",
    "uploaded_at": "2026-02-01T10:00:00.000Z",
    "size_bytes": 307200
  }
}

Contract document deleted

contract_document.deleted

Fired when a contract document is deleted.

Zap idea:
Show example payload
JSON
{
  "id": "evt_00000000-0000-4000-8000-000000000000",
  "event": "contract_document.deleted",
  "created_at": "2026-01-15T10:30:00.000Z",
  "landlord_id": "11111111-1111-4111-8111-111111111111",
  "_test": true,
  "data": {
    "_test": true,
    "document_id": "contract_doc_test_1",
    "contract_id": "contract_test_1",
    "property_id": "property_test_1",
    "name": "Tenancy Agreement",
    "type": "Contract",
    "deleted_at": "2026-02-01T10:00:00.000Z"
  }
}

Note created

note.created

Fired when a note is added to a maintenance issue.

Zap idea:
Show example payload
JSON
{
  "id": "evt_00000000-0000-4000-8000-000000000000",
  "event": "note.created",
  "created_at": "2026-01-15T10:30:00.000Z",
  "landlord_id": "11111111-1111-4111-8111-111111111111",
  "_test": true,
  "data": {
    "_test": true,
    "note_id": "note_test_1",
    "issue_id": "issue_test_1",
    "property_id": "property_test_1",
    "text": "Tenant confirmed access for tomorrow.",
    "created_at": "2026-02-01T10:00:00.000Z"
  }
}

Document signed

document.signed

Fired when an e-signature request is fully signed.

Zap idea: Save the signed PDF to Dropbox or Google Drive automatically.
Show example payload
JSON
{
  "id": "evt_00000000-0000-4000-8000-000000000000",
  "event": "document.signed",
  "created_at": "2026-01-15T10:30:00.000Z",
  "landlord_id": "11111111-1111-4111-8111-111111111111",
  "_test": true,
  "data": {
    "_test": true,
    "signature_request_id": "sigreq_test_1",
    "document_name": "Tenancy Agreement.pdf",
    "signer_email": "tenant@example.com",
    "document_type": "tenancy_agreement",
    "status": "signed",
    "signed_document_url": "https://example.com/signed.pdf"
  }
}

Document declined / unsigned

document.unsigned

Fired when an e-signature request is declined or expires unsigned.

Zap idea: Send a polite reminder email to the signer.
Show example payload
JSON
{
  "id": "evt_00000000-0000-4000-8000-000000000000",
  "event": "document.unsigned",
  "created_at": "2026-01-15T10:30:00.000Z",
  "landlord_id": "11111111-1111-4111-8111-111111111111",
  "_test": true,
  "data": {
    "_test": true,
    "signature_request_id": "sigreq_test_1",
    "document_name": "Tenancy Agreement.pdf",
    "signer_email": "tenant@example.com",
    "document_type": "tenancy_agreement",
    "status": "declined"
  }
}

Deposit updated

deposit.updated

Fired when a deposit reaches an outcome — returned, partially returned after deductions, retained, or disputed.

Zap idea:
Show example payload
JSON
{
  "id": "evt_00000000-0000-4000-8000-000000000000",
  "event": "deposit.updated",
  "created_at": "2026-01-15T10:30:00.000Z",
  "landlord_id": "11111111-1111-4111-8111-111111111111",
  "_test": true,
  "data": {
    "_test": true,
    "deposit_id": "deposit_test_1",
    "contract_id": "contract_test_1",
    "tenant_id": "tenant_test_1",
    "property_id": "property_test_1",
    "property_name": "12 Test Street",
    "amount": 1500,
    "status": "partial_return",
    "deduction_amount": 250,
    "deduction_reason": "Cleaning £150 (End of tenancy clean); Damage £100 (Broken door handle)",
    "days_to_return": 10
  }
}

Payment plan created

payment_plan.created

Fired when a landlord agrees a schedule for a tenant to clear rent arrears.

Zap idea:
Show example payload
JSON
{
  "id": "evt_00000000-0000-4000-8000-000000000000",
  "event": "payment_plan.created",
  "created_at": "2026-01-15T10:30:00.000Z",
  "landlord_id": "11111111-1111-4111-8111-111111111111",
  "_test": true,
  "data": {
    "_test": true,
    "plan_id": "plan_test_1",
    "tenant_id": "tenant_test_1",
    "property_id": "property_test_1",
    "property_name": "12 Test Street",
    "outstanding_amount": 1200,
    "plan_description": "6 instalments of £200.00, from 2026-09-01 to 2027-02-01",
    "agreed_date": "2026-08-21"
  }
}

Meter registered

meter.registered

Fired when a utility meter is recorded at a property.

Zap idea:
Show example payload
JSON
{
  "id": "evt_00000000-0000-4000-8000-000000000000",
  "event": "meter.registered",
  "created_at": "2026-01-15T10:30:00.000Z",
  "landlord_id": "11111111-1111-4111-8111-111111111111",
  "_test": true,
  "data": {
    "_test": true,
    "meter_id": "meter_test_1",
    "property_id": "property_test_1",
    "utility_type": "electricity",
    "unit": "kWh",
    "tariff_structure": "economy_7",
    "payment_mode": "credit",
    "mpan": "1200023305408",
    "location_description": "Cupboard under the stairs",
    "removed_date": null
  }
}

Meter updated

meter.updated

Fired when a meter’s details change — supply number, unit, location.

Zap idea:
Show example payload
JSON
{
  "id": "evt_00000000-0000-4000-8000-000000000000",
  "event": "meter.updated",
  "created_at": "2026-01-15T10:30:00.000Z",
  "landlord_id": "11111111-1111-4111-8111-111111111111",
  "_test": true,
  "data": {
    "_test": true,
    "meter_id": "meter_test_1",
    "property_id": "property_test_1",
    "utility_type": "electricity",
    "unit": "kWh",
    "tariff_structure": "economy_7",
    "payment_mode": "credit",
    "mpan": "1200023305408",
    "location_description": "Cupboard under the stairs",
    "removed_date": null
  }
}

Meter removed

meter.removed

Fired when a meter is taken off the wall. Its readings stay attached to it, so historic consumption is still attributed to the hardware that produced it.

Zap idea:
Show example payload
JSON
{
  "id": "evt_00000000-0000-4000-8000-000000000000",
  "event": "meter.removed",
  "created_at": "2026-01-15T10:30:00.000Z",
  "landlord_id": "11111111-1111-4111-8111-111111111111",
  "_test": true,
  "data": {
    "_test": true,
    "meter_id": "meter_test_1",
    "property_id": "property_test_1",
    "utility_type": "electricity",
    "unit": "kWh",
    "tariff_structure": "economy_7",
    "payment_mode": "credit",
    "mpan": "1200023305408",
    "location_description": "Cupboard under the stairs",
    "removed_date": "2026-09-05"
  }
}

Meter reading recorded

meter_reading.recorded

Fired when a reading is taken. A reading on a changeover date carries two tenancy links — one check-out and one check-in — because it is one physical visit serving both.

Zap idea:
Show example payload
JSON
{
  "id": "evt_00000000-0000-4000-8000-000000000000",
  "event": "meter_reading.recorded",
  "created_at": "2026-01-15T10:30:00.000Z",
  "landlord_id": "11111111-1111-4111-8111-111111111111",
  "_test": true,
  "data": {
    "_test": true,
    "reading_id": "reading_test_1",
    "meter_id": "meter_test_1",
    "property_id": "property_test_1",
    "utility_type": "electricity",
    "reading_date": "2026-09-05",
    "reason": "changeover",
    "status": "actual",
    "payment_mode": "credit",
    "registers": [
      {
        "register": "day",
        "value": 12345.5,
        "unit": "kWh"
      },
      {
        "register": "night",
        "value": 9876.25,
        "unit": "kWh"
      }
    ],
    "contracts": [
      {
        "contract_id": "contract_test_1",
        "role": "check_out"
      },
      {
        "contract_id": "contract_test_2",
        "role": "check_in"
      }
    ],
    "warnings": []
  }
}

Flow B — have Zapier call the HomeDash API

When something happens in another app (a Calendly booking, a Gmail label, a Typeform submission…) you can have Zapier call HomeDash to read data or create a maintenance task / log a note.

1

Generate a HomeDash API key

In Dashboard → Developer → API keys, create a key with scope = read_write, mode live. Copy the full secret.

2

In Zapier: add a 'Webhooks → Custom Request' action

  1. Pick Webhooks by Zapier → Custom Request as the action.
  2. Method: for example GET to read or POST to create.
  3. URL: the HomeDash endpoint, e.g. https://app.homedash.co.uk/api/public/v1/properties.
  4. Data Pass-Through: No.
  5. Headers: add two rows.
3

Headers and body

HTTP
Authorization: Bearer hd_live_…
Content-Type: application/json

For a write call, paste this in the Data field (Zapier will send it as JSON):

JSON
{
  "title": "Boiler not heating water",
  "propertyId": "{{property_id_from_previous_step}}",
  "priority": "High"
}

Use Zapier's field picker to map values from the previous trigger step into the body. {{property_id_from_previous_step}} is just an example.

4

Test the action

Click Test action. Zapier shows the response. A successful POST /tasks returns 201 with data.id — map that into downstream actions if you need to follow up. If you used a sandbox key for testing, the response will include "sandbox": true.

Heads up: Write endpoints (for example POST /rent/{id}/invoice/email, POST /maintenance/issues) require an Enterprise plan and a read_write key. Read endpoints (including invoice PDF download) work on Portfolio or Enterprise. See Authentication for the full matrix.

Recipe — rent invoice PDF and email

Full reference: Rent invoices via API.

Download invoice PDF

  • Method: GET (not POST)
  • URL: https://app.homedash.co.uk/api/public/v1/rent/{rent_payment_id}/invoice/pdf
  • Headers: Authorization: Bearer hd_live_… only
  • Data: leave empty

Zapier shows %PDF-1.4 in the test panel — that is success. To save the file, add a follow-up step (Google Drive, Dropbox, or email with attachment).

Email invoice to tenant

  • Method: POST (not GET — GET returns 405)
  • URL: https://app.homedash.co.uk/api/public/v1/rent/{rent_payment_id}/invoice/email
  • Headers: Authorization: Bearer hd_live_… and Content-Type: application/json
  • Data: at minimum — do not leave the field blank
JSON
{}

Optional override: {"email":"tenant@example.com"}. Requires Enterprise + read_write key. Sandbox keys return "sent": false without sending SMTP.

Common gotchas

  • Zapier sometimes "remembers" the first test sample for the field picker. If you change the event types on your subscription, send another test delivery so Zapier can re-discover the new fields.
  • If you see a 429 rate-limit response, slow the Zap down or switch to a higher plan tier — see rate limits.
  • Use a separate API key per Zap so you can revoke one without breaking the others.
  • Invoice email uses POST; invoice PDF uses GET. Swapping them returns 405 or Invalid JSON body.
  • For POST …/invoice/email, set Data to and include Content-Type: application/json.