Back to Home
Automation

Automating Quarterly CMAs Between Rex CRM and Pricefinder: The Code Is the Easy Part

All seven steps of a quarterly CMA workflow are technically supported by Rex and Pricefinder. The binding constraint is licensing, not engineering.

13Labs Team29 July 202618 min read
Rex CRMPricefinderreal estate automationAPI integrationcompliance

Contents

The Verdict: Every Step Is Buildable, and That Is Not the Problem

All seven steps of a quarterly Comparative Market Assessment workflow between Rex CRM and Pricefinder are supported by documented, primary-source API capability. Reminders can be read, appraisals can be written, email templates can be merged, and Pricefinder renders CMA PDFs on the server. The constraint that decides whether this project ships is commercial and legal, not technical. That inversion is worth sitting with, because it reverses the usual shape of an integration project. Most workflows fail on a missing endpoint. This one has every endpoint it needs. It fails, or does not fail, on a single line in Pricefinder's terms about direct marketing, on whether an integration user consumes one of the agency's paid seats, and on a Victorian price representation regime that makes the human approval step legally load-bearing rather than optional. The workflow itself is familiar to anyone running an agency database. Rex holds the contacts and the reminders. Every quarter a past client is due a property update. Today someone pulls the comparable sales by hand, drops them into an email template, sends it, logs the appraisal and sets the next reminder. It is an hour of work repeated hundreds of times a year. This guide assesses each step against what Rex and Pricefinder actually publish, then spends the second half on the part that decides the project: what the data licence permits, and what an architecture has to look like to stay inside it.

What Rex Actually Exposes

Rex publishes 278 API services carrying 2,620 methods, 43 of which have full OpenAPI documentation, read directly from Rex's own `ApiDocs::getAvailableServices` endpoint on 29 July 2026. Compared with the property data providers sitting next to it in the stack, Rex is by far the permissive layer. The API has an unusual shape. Every call is a POST. Rex states plainly that other HTTP methods, including GET and PUT, will not work. The endpoint form is the base URL plus `/v1/rex/{Service}/{method}`, and Rex accepts three spellings of the same call, including `/v1/rex/Appraisals::search`. Responses come back as a `result` and `error` pair. The internal codename in the OpenAPI title is Wings. Authentication is a token obtained from `Authentication/login` with an email and password, then sent as a bearer token. The default lifetime is one hour of activity, extendable to a week by passing `token_lifetime` in seconds, and Rex resets the clock roughly every thirtieth request. The field-level detail is where this gets concrete. `Reminders::describeModel` reports 1,370 searchable fields, because reminders join through related contacts, properties and listings. Record fields include `reminder_date`, `reminder_type_id`, `remindee_id`, `approval_status_id`, and the recurrence set `recur_frequency`, `recur_unit`, `recur_week_day` and `recur_stop_after_date`. `Appraisals::describeModel` reports 132 searchable fields, `Contacts::describeModel` reports 437. Recurring reminders with a scheduled send are native record fields in Rex, not an add-on. A quarterly touch is `recur_frequency: 3` with `recur_unit: month` on a reminder record, which means the schedule can live in the CRM where the agent can see and change it.

The Seven Steps, Assessed Against Real Endpoints

Every step in the workflow maps to a named service and method that exists today. The table below gives the verdict and the specific endpoint that does the work. | Step | What it does | Verdict and endpoint | |---|---|---| | 1. Scan Rex for due reminders | Scheduled read of reminders | Supported. `Reminders::search`, 1,370 searchable fields including `reminder_date`, `reminder_type_id`, `recur_frequency`, `recur_unit` | | 2. Filter for quarterly CMA reminders | Narrow to the right reminder type | Supported. Same search call, filtered on reminder type and date | | 3. Build the CMA from comparables | Pull comparable sales, render a report | Supported. Pricefinder `GET /properties/{propertyId}/radial/sales`, plus server-rendered `GET /properties/{propertyId}/autocma/sale/pdf` | | 4. Draft into a Rex email template | Populate and preview a merged message | Supported. `MailMerge::createAndSend`, `MailMerge::getMergedStringSet`, `AdminMergeTemplates::getMergeTagsForRecordType`, `AdminHtmlTemplates::renderTemplate` | | 5. Create a review task for the agent | Assign the draft to a person | Supported. `Reminders::create` with `remindee_id`, plus native approval via `requestApproval`, `approve`, `reject`, `getApproverList` | | 6. Human approves before send | Compliance gate | Supported, and legally necessary in Victoria | | 7. Log the appraisal, reset the reminder | Write the record, schedule the next | Supported. `Appraisals::create` with 132 searchable fields, plus `Reminders::create` or `Reminders::maybeRecur` | Two caveats sit behind that table. Step 4 is supported by the Rex API but not by Zapier alone. Rex's native Zapier app carries 20 triggers, 11 write actions and 4 search actions, and its Send Email action sends a message rather than merging a template. Anything that writes to a core record, or that merges through Rex's template library, needs the full API. Step 5 uses a piece of Rex vocabulary that trips people up. Rex has no separate task object. What an agent calls a task is a reminder with a remindee, which is why `Reminders::create` covers both the review queue item and the next quarterly trigger.

The Rate Limit Is the Binding Design Constraint

Rex caps API access at 3,600 requests per hour per agency account, which is one request per second sustained. Rex describes the limit as currently soft and states that it will be strictly enforced in the future. That single number shapes the architecture more than any other fact in this guide. One request per second rules out the design most teams reach for first, which is a loop that walks the contact list and calls Pricefinder and Rex once per person in real time. An agency with a few thousand contacts due for a quarterly touch would burn its entire hourly budget on the read alone, and would do it again for every write. The workable pattern is batch and cache: one large search, held in memory or a short-lived store, processed locally, then written back in batches. Rex's search result formats are built for exactly this. `Reminders::search` returns 500 records in the default format, but 50,000 in the `etags` format and up to 1,000,000 in the `ids` format. Contacts and Appraisals both allow 50,000 and 1,000,000 on the same two formats. You pull identifiers cheaply, work out what actually changed, and spend your request budget only on the records that need it. Rex's own recommendation in its documentation is to sync data into a local store on a periodic basis rather than making live per-request API calls. Note that this sits alongside an API term requiring any cached data to be refreshed at least every 24 hours, so the local store is a working cache with an expiry, never a mirror.

Webhooks, and the Failure Mode That Loses Events Silently

Rex supports more than 50 webhook events covering create and update across its common services, and webhooks are available on all subscription tiers rather than being gated behind an enterprise plan. The trap is in the delivery health rules, and it is the kind of thing you discover in production if you have not read the documentation carefully. Rex marks a webhook unhealthy at a failure rate of at least 99 per cent over a 24-hour period. A failure is any response code outside 102, 200, 201, 202 and 204, or any response that takes 10 or more seconds. Once a webhook is unhealthy, delivery stops entirely, and Rex states that any events which occurred while the webhook was unhealthy will not trigger the webhook. There is no replay. You restore delivery manually through `AdminWebhooks::markAsHealthy` or the interface, and the gap stays a gap. The 10-second budget is the practical driver. Your receiver has to acknowledge immediately and process asynchronously. Any endpoint that calls Pricefinder inline before responding will breach the budget under load and start accumulating failures. Rex's own recommended architecture, stated in its documentation, is to run a nightly e-tag sync in conjunction with the webhook delivery system. That is worth taking at face value. The webhook gives you low latency on the common case, the nightly sync catches whatever the webhook dropped, and the two together are what makes a quarterly workflow trustworthy enough to attach an agent's name to.

The Commercial Catch Most People Miss

An integration user counts against the agency's paid user slots, so connecting an automation to a Rex account adds to that agency's monthly bill unless you complete Rex's Verified Integrator programme. Rex states this directly in its integrations documentation, adding that agencies are likely to be wary of adding integrations for exactly this reason. The Verified Integrator path removes the seat cost, but it has an ordering problem baked into it. Rex requires the integration to already be built and live in at least one client account before you can apply, and the application turnaround is 5 to 10 business days. So the first client pays for a seat, and only after the integration is running in their account can you apply to stop charging every subsequent client for one. Plan the first engagement with that in mind rather than discovering it during a pricing conversation. All integrators must send the `X-App-Identifier` header, formatted as `Integration:AcmeCorp:ServiceName`. Verified integrators receive an additional private header on approval. There is no developer console and no self-serve signup, so access begins with being invited into a client's Rex account. Rex's CRM Product API Terms then shape what you may do with what comes back. You may not copy or store data except as expressly permitted, cached data must be refreshed at least every 24 hours, all data must be stored and served using strong encryption, and you must delete data on request. You may not sell, rent, lease, sublicense, redistribute or syndicate access to the API. Most importantly for this workflow: contact information obtained through the API cannot be used for external outreach without the contact's express permission.

Pricefinder Can Generate the CMA, and That Was the Surprise

Pricefinder's live Swagger specification is publicly readable and contains `GET /properties/{propertyId}/autocma/sale/pdf`, a server-rendered CMA report with query parameters for comparable_sales, comparable_listings, comparable_rentals, cover_letter, cover_page, demographics, maps, radius, stats and summary. A rental equivalent exists at `/autocma/rental/pdf`. Generating a CMA programmatically is not a workaround, it is a documented endpoint. The specification describes itself as PriceFinder API v1.13.1 and carries 112 endpoint paths across 188 schema definitions. Comparable sales retrieval is rich: `GET /properties/{propertyId}/radial/sales` accepts radius, date range, price range, bed, bath, car park and area filters, with polygon search available separately. There is also `GET /appraisals/soi/{appraisalShareId}`, which returns a Statement of Information, the Victorian underquoting compliance document. A data provider shipping a compliance-document endpoint tells you something about what its customers actually do all day. The architectural catch is authentication. Pricefinder's developer onboarding page states it plainly: "For most integrations (outside Enterprise and Real Estate Groups), you will need to authenticate every API request with the end user's Pricefinder credentials." The API acts on behalf of an existing paid subscriber. It is not an independent data feed you licence once and resell. That means every agent using your automation needs their own Pricefinder seat. Pricefinder is unusual among Australian property data providers in publishing a seat price at all: its partner page names $175 plus GST per month as the standard rate. For a ten-agent office that is a real line item, and it belongs in the scoping conversation before anyone writes code.

The Line That Decides Whether the Project Exists

Pricefinder states that its APIs are not available for commercialisation, and separately prohibits use of its data for direct marketing. Those two sentences, not any missing endpoint, are what determines the shape of a quarterly CMA product. The first, verbatim from Pricefinder's API onboarding page: "Pricefinder API's are not available for commercialisation. In most cases, the end user must be a member of Pricefinder to activate". The second, verbatim from Pricefinder's pricing page footnotes: "Data obtained from Pricefinder, including any personal information, should not be used for direct marketing activities. This is strictly prohibited under Pricefinder's terms and conditions." The restriction runs deeper than one vendor's footnote. The licence URL declared inside Pricefinder's own Swagger specification points at Domain's API terms and conditions, so those terms govern Pricefinder API data too. Clause 7.6(k) prohibits using the API data "for any direct marketing purposes". Clause 7.6(j) requires that the data not be accessed, used, stored or otherwise made available outside Australia, which rules out an offshore serverless region for the processing step. Clause 7.6(g) prohibits copying, modifying, translating or creating any derivative work. Nobody in this chain is being difficult. The restrictions are inherited from the land titles offices and Valuers-General the data originates from, which is why the next section matters more than any single vendor's terms.

The Prohibition Is Structural, Not One Vendor's Preference

Every Australian state property sales licence prohibits using that data for direct marketing or contact-list building. This is not a Pricefinder policy choice that a different supplier would solve. The best public document showing it is Cotality's Third Party Restrictions page, which flows each state's actual licence terms into a reseller's end-user contract. | State | Direct marketing and list building | Redistribution | Owner names | |---|---|---|---| | VIC | Prohibited. No use to "prepare mailing lists or to assist in direct marketing" | No "reproduce, sell, disclose, repackage or on-supply" | Disclosure limited to address, land description, sale price and sale date; no name-based search | | NSW | Prohibited. Must not use the information "for Direct Marketing activities, or with the intention of encroaching upon or interfering with the privacy of an individual" | No on-selling, sub-licensing or creating competing datasets | Not specified in the same terms | | QLD | Prohibited. No "Mail Merge Functionality" and no direct marketing | Own use or ordinary course of business only, not as a reseller | Identified information must not be used for direct marketing | | SA | Prohibited. The data "must not be used for the purposes of compiling contact lists, whether personalised or not" | Derivative products require Registrar-General approval | Not specified in the same terms | | WA | Prohibited, with direct marketing defined broadly | Will not "sell, license, hire, let, trade or expose for sale or derive revenue" | Tenure data with owner names is subject to strict licensing conditions | Three red lines run consistently through all five. Attaching owner names to properties. Bulk redistribution or recreating the dataset. Any use for direct marketing or contact-list building. Be precise about what that does and does not stop, because the distinction is the whole build. Displaying sale prices and sale dates to a client is expressly within what Victoria permits an agent or valuer to disclose. Showing comparables in a report is fine. Building a recipient list from those comparables is not. The Queensland wording is the one to keep in mind while designing an email pipeline, because a mail merge is exactly what step four of this workflow does, and the licence draws its line at using the licensed data to decide who receives the merge rather than at merging as such.

How to Build It Anyway: One Architectural Boundary

A quarterly CMA email is still buildable, but only with a strict separation between where the recipient list comes from and where the property data comes from. Licensed property data may populate the content of a message to someone who has already opted in. It may never be used to build, enrich or select the list. That sounds like a disclaimer. It is not. It is a boundary a build has to enforce in code, and it changes concrete design decisions. The recipient set is assembled from consent your client independently holds: a past client who provided their email during a transaction, a subscriber who ticked a box, a contact with a documented, provable and ongoing relationship. That query runs against Rex contact records and consent flags only. It never touches Pricefinder. Only once a recipient is selected does the property data enter the process. You look up the property they already own, pull comparables through `radial/sales`, render the report, and merge it into the message. If Pricefinder returns nothing useful, the recipient drops out of the send. If your consent query returns nobody, no Pricefinder call is made at all. The test to apply during code review is a simple one. Trace every field that influences who receives a message. If any of them originated from a licensed property data source, the build is on the wrong side of the line and needs restructuring rather than a caveat in the terms of service. The cleanest way to hold the privacy question in your head is this: the address, price and date triple is defensible as non-personal information, but the moment an owner's name or contact details attach to it, it becomes personal information and the full Australian Privacy Principles regime applies. That maps exactly onto where every state licence draws its line, which is a useful sign that the boundary is real rather than an artefact of one contract. Pricefinder reinforces it at the API level: it states that in Victoria ownership names are accessible only to licensed real estate professionals, valuers and government agencies, and that owner name search is not available in Victoria at all.

The Victorian Irony Worth Sitting With

Victorian law compels an agent to publish the three most comparable sales, while the data licence covering those same sales restricts their redistribution in other contexts. The same three numbers are mandatory in one setting and constrained in another, and the difference is the purpose they are put to. The Statement of Information regime requires an agent selling a Victorian residential property to produce the three most comparable sales, drawn from within the previous 6 months and a 2 km radius for a metropolitan listing, or the previous 12 months outside metropolitan Melbourne. That is not a disclosure an agent chooses to make. Consumer Affairs Victoria requires it, and the penalties described later in this guide attach to getting it wrong. Meanwhile the licence terms behind the data prohibit repackaging or on-supplying it and prohibit using it to prepare mailing lists. A build that assembles comparables to satisfy a legal disclosure to a client is on solid ground. The identical query, run to decide who should receive an unsolicited email, is not. Pricefinder has built for exactly this. Its API exposes `GET /appraisals/soi/{appraisalShareId}`, a Statement of Information endpoint, alongside an extended variant and an `AppraisalSOICMAOptions` schema. A property data provider shipping a purpose-built compliance-document endpoint is a fair signal of what its customers spend their days on, and it is the single most useful endpoint in the specification for an agency operating in Victoria.

Why the Approval Step Is Legally Load-Bearing

In Victoria, a property price estimate sent to a consumer is a price representation, and it engages the Estate Agents Act 1980 (Vic) alongside Consumer Affairs Victoria's Statement of Information regime. Step six of this workflow is a compliance control, not a courtesy. The Statement of Information rules are specific. A price representation on a residential property must carry an indicative selling price as either a single figure or a range no wider than 10 per cent, the details of the three most comparable properties sold, and the suburb median house or unit price, no more than 6 months old and based on a period of 3 to 12 months. Consumer Affairs Victoria states a penalty of more than $48,842, being 240 penalty units, for non-compliance, and an agent may forfeit their commission where they set an unreasonable estimated selling price or advertise below it. Enforcement is live rather than theoretical. The Victorian Government's underquoting taskforce has monitored over 700 auctions and issued more than $1.1 million in fines to estate agencies, and Consumer Affairs Victoria has laid criminal charges, including against a Melbourne agency over an Ivanhoe townhouse. The liability sits with the agent whose name is on the email, which is precisely why they will want to read every figure before it goes. Two further obligations attach to the send itself. The Spam Act 2003 (Cth) requires consent, sender identification and a functional unsubscribe honoured within 5 business days, and consent does not transfer with a purchased list. From 10 December 2026, APP 1.7 requires an entity's privacy policy to disclose where a computer program uses personal information to make, or to directly support the making of, a decision that could reasonably be expected to significantly affect an individual's rights or interests. Build the audit log now: who approved which estimate, when, and against which comparable sales. For the design of that gate, see human approval before an automated send.

The Privacy Change That Landed Four Weeks Ago

From 1 July 2026, obligations under the Anti-Money Laundering and Counter-Terrorism Financing Act 2006 (Cth) apply to real estate professionals, and the OAIC states that reporting entities must comply with the Privacy Act when handling personal information for the purposes of, or in connection with, those obligations. It says this includes small businesses with annual turnover under $3 million. For practical purposes the small business exemption is gone for real estate. Be careful about how far that reaches. Whether the obligation extends to a marketing database or only to records held for anti-money laundering purposes is a genuinely open question, and we have not been able to verify a settled answer. Present it to a lawyer as a scoping question rather than assuming either reading. What we would say with confidence is that very few agencies can practically run two privacy regimes side by side, one for verification records and a looser one for everything else, so the likely operational outcome is a single standard applied across the database. Two other changes belong on the same calendar. The statutory tort of serious invasions of privacy has been in effect since 10 June 2025, which creates a private right of action rather than only a regulator-led one. And from January 2026 the OAIC has been running its first privacy compliance sweep, targeting the privacy policies of businesses that collect personal information in person, with real estate agents named as an example of the businesses in scope. The design implication is the same in each case, which is convenient. Know where every contact record came from, hold a record of the consent attached to it, be able to show what an automated system did with it, and be able to delete it on request. A quarterly CMA pipeline that can answer those four questions on demand is in reasonable shape regardless of which way the AML/CTF scope question resolves.

Is the Workflow Worth Building

The strongest number available on this specific tactic is a vendor claim, and it should be read as one. Realtair, an Australian sales platform, states on its product page that "up to 1 in 10 Market Updates sent convert to an appraisal". No methodology or sample is published, and Realtair sells the product that produces the figure, so treat it as directional rather than as a benchmark. The more durable framing comes from hold periods. Cotality's Pain and Gain Report for the March 2025 quarter puts the national median hold period for Australian resales at 8.8 years, across 86,000 dwellings resold nationally in that quarter. Quarterly contact across an average ownership cycle is therefore roughly 35 touches before the average owner transacts. That 35 is our arithmetic from a sourced figure rather than a published statistic, and it reframes the build: you are not automating a campaign, you are automating a decade of consistency that nobody sustains manually. Kate Smith, Director and Principal of Kate Smith Property, described the gap this fills to Realtair in March 2026: "I have so many clients, and I know I should be talking to them. But if you have that automation happening for you, it's just something you know is constantly working in the background. Nothing beats a phone call, but Realtair is an amazing, amazing product." A sensible build order follows from everything above. Confirm the Pricefinder licensing position for the specific use case in writing before writing code, because a negative answer removes the project rather than reshaping it. Design the consent query and the property data lookup as separate stages with an enforced boundary between them. Batch every Rex call against the one request per second budget. Put the draft in front of the agent inside Rex, where they already work, alongside the comparable sales that produced the number. Then log the approval. For the wider picture of what an agency stack can and cannot automate, see real estate agent automation in Australia.

Frequently Asked Questions

Can Rex's API read reminders, or only create them? Read and much more. The Rex `Reminders` service exposes `create`, `read`, `update`, `search`, `defer`, `toggleCompletionState`, `maybeRecur`, `getRecurDate`, `requestApproval`, `approve`, `reject`, `getApproverList` and `getRemindeeList`. `Reminders::describeModel` reports 1,370 searchable fields, including `reminder_date`, `reminder_type_id` and the full recurrence set. A quarterly reminder is `recur_frequency: 3` with `recur_unit: month`. Can an automation write an appraisal record back into Rex? Yes. The Rex `Appraisals` service exposes `create`, `read`, `update`, `search`, `searchGrouped` and `autocomplete`, with 132 searchable fields on the model. Those fields include `appraisal_date`, `price_min`, `price_max`, `pipeline_stage_id` and `listing_id`, which is null where an appraisal never converted. Writing the appraisal and setting the next reminder are both standard API calls. Can a Pricefinder CMA be generated programmatically? Yes. Pricefinder's publicly readable Swagger specification includes `GET /properties/{propertyId}/autocma/sale/pdf`, which renders a CMA on the server with query parameters controlling comparable sales, comparable listings, cover letter, maps and statistics. A rental equivalent exists, as does `GET /appraisals/soi/{appraisalShareId}` for the Victorian Statement of Information. Each request authenticates with an end user's own Pricefinder credentials. Does sending quarterly value updates count as direct marketing? Pricefinder's terms prohibit using its data, including personal information, for direct marketing, and Domain's API terms at clause 7.6(k) prohibit use of API data for any direct marketing purposes. The workable position is architectural separation: the recipient list must come from independently obtained consent, and licensed property data may only populate the content of a message to someone who already opted in. Confirm your specific use case with Pricefinder in writing. Will connecting an integration increase the agency's Rex bill? Yes, unless you are a Verified Integrator. Rex states that the integration user counts against the agency's user slots. The Verified Integrator programme removes that cost, requires the `X-App-Identifier` header and an integration already live in at least one client account, and takes 5 to 10 business days to assess. Budget for the first client carrying a seat. Can Zapier alone run this workflow? No. Rex's Zapier app carries 20 triggers, 11 write actions and 4 search actions, and it can create a reminder, a note or a lead and send an email. It cannot merge a Rex email template, and it cannot create or update a contact, listing, property or appraisal. Anything writing to a core record needs the full API.

Scope the licensing before you scope the build

buildAutomation maps real estate workflows against what your CRM and data provider genuinely permit, enforces the consent boundary in the architecture, and builds the approval gate alongside the automation.

See buildAutomation