Home / Property Management / Rental inquiry auto-reply: the same facts to every prospect, in the order they asked

Property Management problem 5: Rental inquiries pile up in the inbox, and every prospect gets a slightly different answer depending on who replies

Rental inquiry auto-reply

The same facts to every prospect, in the order they asked

Verified with mocksLast tested 2026-10-31 · pricing checked October 2026
Download the workflowpm-rental-inquiry-auto-reply.zip

11/11 test scenarios passed against mock APIs. Includes the n8n workflow, mock data and the test runner.

  • n8n
  • Twilio
  • Resend
  • Google Sheets

A web form (or a listing's link to it) takes name, email, optional phone and text consent, the listing and a message. Every prospect gets one email with the same facts from your listings sheet: rent, deposit, pet policy, availability, and links to your written rental criteria, showing times and the application. The reply template is identical for everyone except the first name; what the prospect wrote never changes it. Leased or unknown listings get every available listing in a fixed order. If your listing text reads as a preference ('no kids', 'perfect for a young couple'), nothing goes out and the manager is told which words to fix, with HUD's page. Questions about accommodations or assistance animals still get the standard reply, and the manager is flagged to answer personally.

How the workflow runs

Trigger · When an event arrives

Inquiry submit (POST)

Steps

  1. Honeypot + form key + dedupe
  2. Same reply for everyone + flags

Outcome

  • Answer the browser
  • Send reply + office

Also runs on: Inquiry form (GET) → Render form → Send form page

Also runs on: Hourly, 8 am-8 pm → Send held texts → Send held

Drawn from the node names in the workflow file inside the download (workflow.json).

The problem

Federal law and HUD guidance, not a cost study; we quote no response-time figures because the ones we found couldn't be verified.

Background reading: Can you auto-reply to rental inquiries without a Fair Housing problem? A checklist

Who it's for

Small property managers and landlords who list rentals on their own site and listing sites and answer inquiries by email.

Tools and monthly cost

ToolOfficial price
Twilio US local phone number$1.15 / month pricing page
Twilio US SMS, sent or received$0.0083 per segment, plus carrier fees on outbound texts of $0.0035-$0.005 per segment pricing page
A2P 10DLC registration (required to text US tenants from a local number)One-time: $4.50 brand registration and $15 campaign vetting. Monthly: $1.50-$10 per campaign by use case pricing page
Resend (sends the emails; any email API that accepts an Idempotency-Key works)Free: 3,000 emails / month, 100 / day. Pro: $20 / month for 50,000 emails pricing page
Google Sheets (rent roll, work orders, consent log, opt-out list, payment ledger)Free with a Google Account pricing page
n8nCommunity Edition: free if you self-host (you pay for the server). n8n Cloud: Starter EUR 20 / month or Pro EUR 50 / month, billed annually pricing page

Example month: Illustrative arithmetic, not a measured result. One local number sending 40 single-segment texts and receiving 40 a month, at the highest listed carrier fee ($0.005): 40 x ($0.0083 + $0.005) + 40 x $0.0083 + $1.15 number = $2.01 a month in Twilio usage, plus the A2P 10DLC campaign fee ($1.50-$10 a month) and one-time registration ($4.50 brand + $15 campaign vetting). Emails stay inside Resend's free tier at this volume. n8n comes on top. Your volumes will differ.

Setup

  1. Google Sheet: a rent_roll tab with columns unit, property, address, tenant_name, email, phone, rent, due_day, late_fee_note, active. Your property management software can export this; nothing here connects to Buildium or AppFolio (Buildium's Open API needs its Premium plan, and AppFolio's API is for approved partners).
  2. Texts need a Twilio number on an approved A2P 10DLC campaign. Set TWILIO_ACCOUNT_SID, TWILIO_BASIC_AUTH (base64 of SID:auth token) and PM_TWILIO_FROM. Point the number's Messaging webhook at /webhook/mss-pm3-sms so STOP and replies are handled in one place.
  3. Email: MSS_EMAIL_API (e.g. https://api.resend.com), EMAIL_API_KEY, PM_EMAIL_FROM, PM_OFFICE_EMAIL, PM_MANAGER_EMAIL. Every send carries an Idempotency-Key, so a retried run never emails twice.
  4. Company details: PM_COMPANY_NAME, PM_COMPANY_PHONE, PM_COMPANY_ADDRESS, COMPANY_TZ (your time zone; texting hours follow it).
  5. Google Sheet stand-in: MSS_SHEET_URL points at the shared sheets (rent_roll, sms_consent, sms_optouts, inbound_texts and the recipe's own sheets). In production, swap these HTTP calls for n8n's Google Sheets node.
  6. Remove the test-only mss-pm*-tick webhooks (or put them behind n8n header auth) and make sure MSS_TEST_CLOCK is NOT set in production.
  7. A listings sheet (listing_id, address, beds, baths, rent, deposit, pets, available, description, status = available or leased; optional per-listing criteria_url, showing_url, apply_url) and defaults LISTINGS_URL, CRITERIA_URL (your written rental criteria, the same for everyone), SHOWING_URL and APPLY_URL.
  8. Share /webhook/mss-pm5-inquiry (add ?listing=L1 to preselect a listing). PM_FORM_HMAC_SECRET and FORM_MIN_SECONDS as in the intake recipe; ACCOMMODATION_WORDS to change the flag list.

Download

Downloadpm-rental-inquiry-auto-reply.zip

Contains the n8n workflow, the mock data, the test runner with its last results, and the mock server we tested against. All keys in .env.example are fake.

Test result

Every workflow was imported into n8n 2.45.4 on an isolated test instance and run end to end. Twilio (signed inbound webhooks, HTTP 429), the email API (Resend-style), Stripe webhook events (signed with a mock secret, verified on the raw body) and Google Sheets were replaced by a local mock server built from the vendors' public docs. A frozen test clock checks due dates and the 8 a.m.-9 p.m. texting window. These recipes use no AI model; every decision is a written rule. Tenants, prospects, units and listings are invented. Verified with mocks; nothing was sent to a real person or account. How we test.

11/11 scenarios passed (run 2026-10-31)

PASSPM5-01Form page: available listings only (leased L2 hidden), deep link preselects L3, signed form key, honeypot, text-consent box, Equal Housing Opportunity line
PASSPM5-02Inquiry about L1: one email with rent, deposit, pets, the written criteria link, showing and apply links; inquiry logged; office copy with their message; text (consent logged)
PASSPM5-03Same person, same listing again within a day: 'already sent', no second email
PASSPM5-04Fair Housing parity: two prospects with very different messages (kids; retired/church) get word-for-word the same reply except the first name; their messages never appear in it
PASSPM5-05Leased listing: told it's gone, then every available listing in a fixed order (L1 before L3), each with criteria, showing and apply links
PASSPM5-06Listing text that reads as a preference ('perfect for a young...', 'no kids'): nothing sent to the prospect; manager told which words and pointed to HUD; logged as not replied
PASSPM5-07Accommodation question (emotional support animal): the standard reply still goes out, unchanged; manager flagged to answer personally, citing 42 U.S.C. 3604(f)(3)(B) and HUD
PASSPM5-08Honeypot filled: polite page, nothing sent or logged
PASSPM5-09Forged form key: 400, nothing sent
PASSPM5-10Inquiry at 11:10 pm: email right away, text held until 8 am (not 7 am)
PASSPM5-11Email API 429 once: retried, exactly one reply

Actual output from the test run

Scenario PM5-02: the reply a prospect gets about a listing (invented prospect and listing). Names and numbers are invented.

Hi Jordan,

Thanks for asking about 12 Maple Court, Unit 4B, Omaha, NE. Here are the details:

12 Maple Court, Unit 4B, Omaha, NE: 2 bd / 1 ba, $1,250.00/month, deposit $1,250.00, available April 1. Pets: cats and dogs under 40 lb, $300 pet deposit. Second floor, in-unit laundry, off-street parking.
  Rental criteria (the same for every applicant): https://elmstreet-pm.example/criteria
  Book a showing: https://elmstreet-pm.example/showings/L1
  Apply: https://elmstreet-pm.example/apply/L1

Questions? Reply to this email or call (555) 555-0160.

Equal Housing Opportunity. We answer every inquiry with the same information, in the order we get them.
Elm Street Property Management

Elm Street Property Management
(555) 555-0160
410 Elm St, Omaha, NE

Verified with mocks

  • Form page: available listings only (leased L2 hidden), deep link preselects L3, signed form key, honeypot, text-consent box, Equal Housing Opportunity line
  • Inquiry about L1: one email with rent, deposit, pets, the written criteria link, showing and apply links; inquiry logged; office copy with their message; text (consent logged)
  • Same person, same listing again within a day: 'already sent', no second email
  • Fair Housing parity: two prospects with very different messages (kids; retired/church) get word-for-word the same reply except the first name; their messages never appear in it
  • Leased listing: told it's gone, then every available listing in a fixed order (L1 before L3), each with criteria, showing and apply links
  • Listing text that reads as a preference ('perfect for a young...', 'no kids'): nothing sent to the prospect; manager told which words and pointed to HUD; logged as not replied
  • Accommodation question (emotional support animal): the standard reply still goes out, unchanged; manager flagged to answer personally, citing 42 U.S.C. 3604(f)(3)(B) and HUD
  • Honeypot filled: polite page, nothing sent or logged
  • Forged form key: 400, nothing sent
  • Inquiry at 11:10 pm: email right away, text held until 8 am (not 7 am)
  • Email API 429 once: retried, exactly one reply
  • Verified with mocks; invented tenants, prospects, units and listings only.

Documented from official API docs only

Built to the vendor's documentation but not run against a live account. Check these on yours.

  • Stripe webhook signing (Stripe-Signature t= / v1=, HMAC-SHA256 of timestamp.raw_body, 5-minute tolerance), Checkout Session fields (client_reference_id, payment_status, amount_total) and the async ACH events come from Stripe's public docs; tests sign events locally with a mock secret, not against a live Stripe account.
  • Twilio request signing, the Messages API, 429 behavior and built-in STOP handling come from Twilio's docs. The email API follows Resend's documented request shape.

Limitations

  • No screening, scoring or ranking of prospects happens here, on purpose. Applications and decisions belong in your screening process under your written criteria.
  • The word check catches common red-flag phrases, not every Fair Housing problem. Have someone who knows the law read your listings.
  • Every outgoing message is checked against a word list first (PM_LINT in pmlib.py): eviction, court action, lawsuit, collections, credit reporting, lockouts, shut-offs, 'notice to quit/pay' and police are blocked, and so are Fair Housing red-flag phrases ('no kids', 'adults only', 'perfect for a young couple', 'English only', 'able-bodied'...). A blocked message is held and the office is told why.
  • Late fees, grace periods, partial-rent rules and notice periods vary by state and city, so nothing legal is hard-coded: every day, hour and amount is a setting, and late-fee wording is only ever your own sentence from the rent roll, sent word for word. The recipes never write notices to pay or quit, never mention eviction, court or credit reporting, and never act on a lease.
  • Generic stack (web form, Google Sheet, Twilio, email API, Stripe Payment Links). Not built for Buildium, AppFolio, Rent Manager or any other property management system; we make no claim these recipes plug into them.
  • Not legal advice and not a compliance guarantee. Texts to tenants and prospects go only to numbers with consent recorded on our own forms, only between 8 a.m. and 9 p.m. local time, and plain-English opt-outs (STOP, 'stop texting me', ...) are honored until the person texts START (47 CFR 64.1200 is the federal rule we design around). Some states are stricter; have your attorney review texting consent before going live.
  • Fair Housing: the Act covers race, color, national origin, religion, sex, familial status and disability (HUD: https://www.hud.gov/helping-americans/fair-housing-act-overview); many states and cities add more classes. Reasonable accommodation questions: https://www.hud.gov/helping-americans/disabilities.
  • We're not lawyers. Nothing here is legal advice. Check HUD's Fair Housing pages (hud.gov/helping-americans/fair-housing-act-overview), the FCC texting rules (47 CFR 64.1200 on ecfr.gov) and your state's landlord-tenant law, or ask a local attorney.