Realtor Outreach Portal

Use the managed realtor outreach portal to review leads, edit native estimates, track replies, and export estimate data.

BeginnerownermanageradminUpdated 2026-08-02

Realtor Outreach Portal

The Realtor Outreach Portal is a self-service, multi-tenant product at realtor.cleanestimate.pro. Each customer receives an isolated workspace for listings, pricing, provider keys, inboxes, estimates, replies, and suppression data. The system finds realtor opportunities in selected ZIP codes, uses visual AI to inspect available property imagery, applies the contractor's pricing rules, creates editable exterior-cleaning estimates, and sends a four-email sequence from the contractor's own inbox.

Public visitors enter through the Realtor Outreach landing page. Pricing, the interactive ROI calculator, the visual-AI quote workflow, customer data ownership, sending controls, and signup are all on that page. The former pricing URL now returns visitors to the pricing section of the landing page.

The public page leads with the outcome: Finds the listing. Prices the job. Sends the quote. You answer the phone. It presents Realtor Outreach as an AI email agent for power-washing companies that watches local listings, studies property photos, applies the contractor's rates, sends the quote, and follows up until a real reply arrives.

The hero product illustration shows that outcome as a short conversation: a $600 house-wash and driveway quote sent from the contractor, followed by the realtor replying, “Looks good — let's book it.”

The four-email workflow is summarized as One quote. Four emails. Zero babysitting. The page emphasizes approval before sending, delivery from the contractor's own address, customer-owned OpenAI and Apify accounts without middleman markup, the $50 base plan, $10 additional inboxes, and the 25-send-per-inbox deliverability ceiling.

Sign up and pay

New customers select Start my AI quote engine, enter their account details with a password of at least six characters, choose their desired inbox count, and complete the hosted Stripe checkout. The plan is $50 per month for the first sending inbox and $10 per month for each additional inbox. Stripe activates the private workspace after successful payment and sends the customer directly into one-time setup.

After a paid workspace is provisioned, the platform owner receives an immediate New signup email containing the customer name, business, email, monthly plan, paid inbox count, daily capacity, Stripe references, and a direct link to the protected customer dashboard. Checkout retries do not create duplicate tenants or duplicate successful-signup notices.

Open Billing inside the portal to see the subscription state, monthly plan amount, connected-versus-paid inbox count, and daily sending capacity. Workspace owners can change the paid inbox allowance and open Stripe's secure customer portal to update their payment method, download invoices, or cancel.

If Stripe reports a past-due, canceled, or suspended subscription, campaign and admin actions pause automatically while the owner keeps access to Billing to restore the account. Billing controls are limited to workspace administrators.

After setup is complete, the workspace is ready without a call. Customers who want help can optionally book a 30-minute onboarding review to check their configuration and first campaign.

The service is designed so the customer supplies:

  • The Gmail or Google Workspace mailbox that should send the outreach
  • The target service ZIP codes
  • The company name, contact details, physical mailing address, and preferred pricing
  • Customer-owned OpenAI and Apify API keys

Outbound outreach is sent directly through the connected customer mailbox, so the customer’s email address appears in the From field. For the test connection, use a Google App Password created specifically for the portal—never the normal Google Account password. The mailbox step includes a direct link to create and manage Google App Passwords. Google requires 2-Step Verification, and a Workspace administrator can disable app passwords. The app-specific credential can be revoked independently.

Replies use a tracked Reply-To address, are stored in the portal, and are then forwarded back into the same customer mailbox. Replying to the forwarded message addresses the original realtor.

Phase 1 scope

Phase 1 stores outreach estimates in a dedicated portal database. It does not create records in the main Clean Estimate Pro account yet.

The portal can:

  • Pull and score supported real-estate listings in the configured territory
  • Review listing photos and create preliminary exterior-cleaning line items
  • Store one native estimate with the associated lead
  • Edit the contact, service address, services, quantities, units, unit prices, discount, scope notes, disclaimer, and status
  • Recalculate totals on the server whenever an estimate is saved
  • Open a signed, read-only customer view for sharing or printing to PDF
  • Export estimate data as CSV or JSON for another system
  • Capture real realtor replies, mark them read or archived, and link them to the correct lead
  • Stop the realtor's follow-up sequence automatically when any reply is received
  • Forward captured replies to the connected inbox so the owner can answer the realtor directly

Phase 2 will send the approved estimate into Clean Estimate Pro while keeping the same portal workflow.

Safe launch controls

A new customer account starts with live sending paused. Listing imports and estimate work remain available while sending is paused.

The service is activated only after the company profile and mailing address are complete, the target ZIP codes are confirmed, the customer mailbox is connected, reply tracking is ready, and a delivery test succeeds. The interface shows whether managed sending is ready.

Managed-sending readiness is based on the customer's verified inbox plus the tracked inbound-reply domain and webhook. It does not require a deployment-level forwarding address; captured replies are forwarded back through the same tenant inbox that sent the outreach.

Open Setup for the one-time guided onboarding. Before any research or estimate generation begins, the customer creates or opens their own OpenAI and Apify accounts, adds API billing where required, and connects both keys. The portal validates each key server-side, encrypts it at rest, and never displays it again. Deployment-level operator keys are not used as a fallback.

The remaining steps save the company profile, validate target ZIP codes, confirm estimate defaults, securely connect the sending mailbox, run a private delivery test, and finish with approval still required and autopilot paused. The completion screen links directly to the optional 30-minute onboarding calendar. The mailbox step links directly to Google App Passwords. Google App Passwords are encrypted at rest and are never displayed after they are saved.

OpenAI, Apify, and mailbox usage are billed directly to the customer by those providers. This keeps provider data, limits, and spend under the customer's control; the portal encrypts stored credentials and does not fall back to operator-owned keys.

The listing monitor now uses that verified customer Apify connection directly. Each daily run rotates through a bounded slice of the customer's saved ZIP codes, pulls up to 25 recent for-sale properties, and requests the associated property details, exterior photos, and publicly listed agent business contact fields. The next run continues through the remaining ZIP codes, keeping provider usage predictable while eventually covering large territories.

When the listing feed provides an agent phone number but no email, the monitor automatically searches public business results through the same customer-owned Apify account. It checks only a bounded batch, requires the result to match the agent's full name, rejects generic office addresses, and verifies the email domain before attaching it. The portal never guesses an address. Unresolved contacts remain blocked from outreach and are retried after 30 days instead of consuming Apify usage on every run.

Apify listing-agent records remain realtor leads. The portal never attaches demo or synthetic homeowner data to a live Apify property.

The send limit has a hard ceiling of 25 emails per day per connected inbox. Connect additional verified inboxes to add another 25 daily sends per inbox. The portal rotates sends across available inboxes, reserves capacity transactionally so overlapping jobs cannot exceed an inbox limit, and processes bounded batches through the business day. Suppression, contact eligibility, and reply status are checked before each send.

The production portal uses Supabase transaction pooling for serverless application traffic, with one Prisma connection per function. This prevents listing-monitor and dashboard requests from exhausting the smaller session-mode database pool during concurrent page loads.

Realtor quote sequence

Newly imported listings enter an automated estimate queue. The portal collapses Zillow's resolution and format variants into one highest-quality URL per actual photo, retains a broad listing gallery, then sends OpenAI a bounded sample containing the front/hero photos and a larger group from the end of the gallery, where agents commonly place backyard and additional exterior views. A manual reanalysis refreshes from the Zillow property-detail page—not its single-photo search card—when that source URL is available. The vision agent reconciles repeated facade angles, counts unique window openings across all shown sides, and inventories patios beneath pergolas separately from the pergola structure. Fence footage includes only clearly visible fence runs and excludes deck railings, pergola components, landscaping, and inferred property boundaries. It applies the workspace's pricing rules and creates an editable Waiting for review estimate. Estimate generation never authorizes an email.

If a listing provides an agent phone number but no email, the portal still builds the draft estimate while automatic public-business-email enrichment runs. If no high-confidence address is found, add a valid realtor email to the estimate before approving it; outreach cannot begin without one.

The first email can only send after the customer opens the estimate and selects Approve for outreach. Approval marks that property ready and authorizes its four-email sequence. If an approved estimate is edited before email one sends, it automatically returns to review and must be approved again. Once email one has sent, later estimate edits update the live quote without interrupting the approved sequence.

The first email introduces the sender by company name and clearly states that the company offers power washing, window cleaning, and gutter cleaning before presenting the quote. It then contains a plain-text breakdown of the approved preliminary estimate, including each service price, any discount, and the estimated total. It deliberately contains no estimate link.

If the realtor does not reply, the second email provides the signed link to the complete customer-facing quote. Email three reminds the realtor that scope and pricing can be adjusted. Email four closes the property-specific sequence without pressure. Every realtor email ends with a P.S. explaining that the company loves referrals and pays $50 for every completed referral. Any real reply stops the remaining follow-ups automatically.

The system includes five complete copy rotations for each stage. A property is assigned one stable rotation, so its four messages read as a coherent thread while the sending pool does not repeat identical copy for every prospect. Copy variation supplements, but does not replace, the 25-email inbox cap, pacing, suppression, verified-contact, and compliance controls that protect sender reputation.

When a previously contacted realtor appears on another listing, the automatic Another listing email names both the earlier property and the new property before presenting the newly approved quote. This event-triggered message also has five editable rotations.

Open Admin and expand Emails your prospects will receive to edit all five variants of every subject and message. Every workspace keeps its own copy. The editor includes a live sample preview, available merge fields, a save action for each variant, and Restore default. Live messages replace sample values with the realtor, current and previous listings, AI-generated scope, estimate total, and signed quote link. Saved changes apply to future message drafts; already-created messages retain the version that was reviewed.

The system protects only the live data fields that make the sequence work, leaving the sales copy itself editable. Email one must keep {{quote_breakdown}}, which inserts the plain-text estimate without a link. Emails two and three must keep {{quote_url}}, which inserts the signed estimate link, and email four must continue identifying {{property_address}}. Unknown merge fields are rejected. The required business address and unsubscribe link remain system-generated and cannot be removed in the copy editor.

Available fields include the realtor first name, current full and street-only property address, previous listing address, generated quote subjects, the plain-text price breakdown, signed quote URL, sender name, company name, and company phone. Legacy full-message quote blocks remain supported for previously saved templates. Customers can restore any individual variant to the production default without changing the remaining rotation.

Review and update an estimate

  1. Open Estimates in the portal.
  2. Select the estimate number you want to review.
  3. Update the customer or property details if needed.
  4. If the AI missed exterior scope, select Reanalyze photos directly on the lead's Photo estimate card, or select Reanalyze listing photos inside the estimate editor. The portal refreshes the complete gallery, reruns the improved photo assessment, and replaces the generated service scope and pricing. Review the replacement before approval.
  5. Add, remove, or edit service line items. Change quantity, unit, and unit price directly in the table.
  6. Adjust the discount, scope notes, or disclaimer.
  7. Select Save changes. The public estimate updates immediately but remains in review.
  8. Select Approve for outreach when the pricing and scope are ready. Email one is blocked until this explicit approval.
  9. Use Preview / print to inspect the customer-facing version, or use Export CSV or Export JSON for your own system.

Public estimate links are signed. A visitor needs the complete link, including its token, to open the estimate.

Work with realtor replies

Open Replies to see the real messages received through tracked outreach. New replies also appear on the dashboard and on the related lead.

When a reply arrives, the portal:

  1. Stores the complete text of the message.
  2. Marks the outbound message as replied.
  3. Stops active follow-ups for that realtor.
  4. Creates an open follow-up task.
  5. Forwards the message to the connected inbox when forwarding is enabled.

Reply to the forwarded message from your inbox to respond to the realtor. The forwarded message uses the realtor's address as its Reply-To address.

Configure the account

Use the Admin menu in the header to open Admin controls, Setup, Compliance, or Billing. This keeps account utilities together while preserving direct links to each page.

The platform owner's allowlisted administrator account also sees Customer dashboard in this menu. That protected view summarizes total customers, active subscriptions, current monthly recurring revenue, and combined daily send capacity, followed by every tenant's subscription, onboarding readiness, provider connections, inbox allowance, usage counts, signup time, and Stripe customer link. Tenant administrators cannot open or discover this cross-workspace view.

Open Admin controls to maintain:

  • Company and contact information shown on estimates and outreach
  • The physical business address used for compliance
  • The default estimate disclaimer
  • Default service pricing overrides
  • Target ZIP codes and the minimum home-price filter
  • Mandatory estimate approval plus campaign and autopilot settings
  • Connected sending inboxes, their verification state, and daily usage
  • Total daily capacity, calculated as 25 emails for every enabled inbox
  • Whether outreach may send on Saturdays and Sundays; weekend sending is enabled by default and can be turned off per workspace
  • Five editable variants of the four-email realtor sequence plus the event-triggered Another listing message, including subjects, message bodies, merge fields, live previews, and per-variant default restoration

Open Billing to maintain the paid inbox allowance, payment method, invoices, and subscription. A workspace cannot connect more inboxes than its paid allowance.

Customer outreach requires a verified inbox owned by that workspace and a complete business identity, including the physical mailing address used in the CAN-SPAM footer. The service never substitutes a Clean Estimate or platform-operator sender, phone number, address, or reply-forwarding destination.

Estimate approval is always required for a property's first email. Activate campaigns only after the delivery status shows that managed sending is ready.

The manual Run listing monitor action refreshes listings, searches a bounded batch of phone-only agents for public business emails, and builds draft estimates through the workspace's own Apify and OpenAI accounts; it never starts outreach. Admin reports how many realtor emails were attempted and found. The scheduled estimate queue continues building review-ready drafts through the day. The daily monitor can still hand approved work to autopilot when autopilot has been explicitly enabled.

Open Admin controls and clear Send on weekends to prevent Saturday and Sunday outreach in the configured business timezone. The estimate queue and listing research may continue, but email sending resumes on Monday. Background job failures send an operational alert to the configured service address and retain the detailed error in server logs.

Was this article helpful?

Still need help? Contact support