Guide · For agents
Agent's daily playbook
on the Rebato platform.
From signup to your first closing — what /agent looks like in practice. This is the deepest of the four role guides because agents use the platform every working day.
1. Getting onboarded
Three steps separate you from a working agent dashboard. None of them require an in-person visit, but the broker approval step does require a real human (your sponsoring broker) to check your license number against the state regulator records.
1.1 Apply
Apply at /auth/signup-agent. Pick your state first — the form then loads a dropdown of brokers in that state. Fill in your license number, license type (salesperson / associate broker / managing broker), and the sponsoring broker you have already lined up. Submitting the form creates a pendingsponsorship row plus an AGENT_SIGNUP_SUBMITTED entry in the hash-chained audit log. Nothing transacts yet — you cannot tour homes or write offers until step 1.3 completes.
1.2 Wait for broker approval
Your sponsoring broker sees the pending row at /brokers/sponsorships. They verify your license against the state regulator records — usually 1 to 3 business days. If your license is mistyped or you picked the wrong broker, expect rejection with a note; just re-apply with the correction. The broker approval is a soft gate; the system also re-verifies your license programmatically against the state regulator API where one is available.
1.3 Approval and first sign-in
Approval emails you. Sign in at /auth/signin. Now /agent shows your dashboard and the post-signin router lands you there automatically. Your role is nowagent_internal; your sessions carry your sponsoring brokerage’s state registration ID, which scopes every query you make.
2. The /agent dashboard
Your dashboard is the home base. It is intentionally calm — four key numbers, a handful of quick-action links, and a sidebar that lets you jump to deeper screens. The header carries a small badge showing your sponsoring broker so you never lose track of which brokerage you are operating under (especially relevant if you ever hold sponsorships in multiple states).
Layout. Sidebar on the left (Dashboard / My listings / New listing / Clients / Offers / Inbox / Back to public site), main content on the right, header pinned with your sponsoring broker badge. The same shell wraps every /agent/* page so navigation stays predictable.
Four KPI cards on the dashboard
My listings
Count of listings where the current user is the list_agent. Click the card to jump to /agent/listings.
Active clients
Count of Buyer Broker Agreements where you are the agent of record and the agreement is within its term window.
Open offers
Drafted or pending offers you authored — anything that has not yet reached an accepted / rejected / withdrawn terminal state.
Tours scheduled
Placeholder for v2 — the showing scheduler ships in a follow-on release.
Quick links. One-click jumps for the most common daily actions: create a new listing, draft a new offer, open the inbox, and (in v2) schedule a tour. The dashboard is designed so 80% of your common moves take one or two clicks from the home view.
3. Managing clients (BBAs)
/agent/clients lists every active Buyer Broker Agreement on which you are the agent of record. Each row shows the buyer’s name, email, BBA status (signed / pending / expired), term-end date, and the timestamp when the BBA was signed. The list is sorted by term-end so the agreements closest to expiring float to the top.
When a buyer wants to tour a home, the system enforces the BBA Hard Gate — the buyer must have a signed, in-term BBA before any showing request goes through. If they do not, you (or the buyer) trigger a DocuSign BBA flow from the listing detail page; once the envelope returns signed, the showing endpoint becomes callable. Pre-NAR-settlement workarounds like “just show it once and we’ll sign later” are blocked at the database level — there is no path to bypass the gate.
Click a client row to drill down (v2 — for now the list view is read-only). The drill-down will show the BBA itself, every audit event tied to the buyer, every search query they ran, every showing they attended, and every offer you authored on their behalf. It becomes the single pane of glass for an agent-buyer relationship.
Term-end approaching? Renewal flow is a v2 feature. Today, the buyer signs a fresh BBA with a new envelope. The old BBA stays in the immutable audit log forever — you can always look back and prove what was in force on a given date, which is exactly what state regulators ask for in a complaint investigation.
4. Listing creation flow
/agent/listings/new walks you through a single-page form. The fields are deliberately tight — no free-form custom fields, no ad-hoc “notes for the marketing team.” Everything that matters is captured in structured columns so the compliance gates can scan it. Free text exists, but only in two places: public remarks and private remarks. Both are scanned, but only public remarks are scanned for steering language.
Form fields
Address (street, city, state auto-filled from your primary license state, ZIP).Property type (SFR / Condo / Townhouse / MultiFamily / Land).Price, beds, baths, square footage, lot size.Public remarks — the description shown on the public listing page. Scanned for steering language before submit.
Steering language scan (HUD §100.75)
The steering NLP scan rejects phrases that have been shown to function as race / familial / religious / disability proxies in Fair Housing case law. Examples that get rejected: “perfect for families,” “exclusive neighborhood,” “safe area,” “Christian community,” “walking distance to temple,” “no children please.” HUD’s 24 CFR §100.75 advertising guidance is the source of truth. When a match is found, the form returns a friendly error showing the offending phrase and a one-line suggestion (e.g., describe the home, not the imagined occupant). The rejected attempt is not published anywhere public; it is only logged to internal compliance review.
On submit, five compliance gates fire automatically
License recheck (Gate 8)
Your license must be active right now, not just at signup. Sponsorship must be current. The system calls licenseRepo.findActive(agentId, state, new Date()) and rejects with ComplianceViolationError if anything is off. There is no Redis cache for “license active” — every sensitive action re-checks against the source of truth.
Steering NLP (Gate 6)
Scans your public remarks one more time at submission. If matches surfaced, you get a friendly error pointing to the exact phrase to rephrase. Blocked language never reaches the public site or the MLS feed.
NAR sanitizer (Gate 2)
Strips any forbidden buyer-agent compensation field from the outbound payload — even if you accidentally include one through the API. Fields like BuyerAgentCompensation, CoopCompensation, and the/buyer.*agent.*compensation/ipattern are removed fail-closed. A single leak would shut us out of the MLS feed and trigger NAR settlement liability — so the sanitizer is the most heavily tested code in the system.
State policy resolver (Gate 7)
PolicyResolver.resolve({ state, transactionType: 'listing_publish', role: 'agent' }) evaluates the state-specific rules for listing publication and writes a row to policy_evaluation with the policy version hash. If a regulator later asks “what rule was in force when this listing went up?” we reproduce it from that hash.
Audit log (Gate 9)
A LISTING_CREATED row is appended to compliance_event_log with prev_hash and payload_hash. The chain is verified nightly and exported to S3 Object Lock (WORM). The row cannot be updated or deleted — DB triggers reject both with SQLSTATE 45000.
After the gates pass, the listing is inserted with status='Draft'. Your designated broker reviews and publishes from /brokers/listings/review. After publish, the listing appears at /listing/{key} with proper agent / brokerage / state registration attribution and is syndicated to the MLS feed on the next sync tick.
5. Offer drafting
/agent/offers shows every offer you authored — drafts, pending, countered, accepted, rejected, withdrawn. Each row shows the listing, the buyer (if you have BBA), the price, the contingencies, and the state machine transition log so you can see at a glance how negotiation is moving.
To draft a new offer, start from a listing detail page and click “Make an offer.” The form captures price, contingencies (financing / inspection / appraisal / sale-of-current), financing details, escalation clause if any, and expiration. The buyer must already have a signed BBA — without it, the “Make an offer” button is hidden.
Submitting the offer triggers the same compliance stack: Gate 8 (license recheck), Gate 7 (state policy resolver — picks up the offer-submission rules for the listing’s state), and Gate 9 (audit log row OFFER_SUBMITTED). If the listing is in a state with required disclosure forms attached to offers, the form blocks submission until those are also signed.
Counter-offer, accept, reject, and withdraw are all logged with state-machine transitions in offer_status_history. Invalid transitions (e.g., trying to accept a withdrawn offer) return a 422 with code INVALID_TRANSITION — there is no way to skip a step.
Once an offer is accepted, the closing saga auto-tracks: inspection → appraisal → title search → walk-through → close. Each milestone is its own event, its own audit log entry, and its own compliance check (e.g., title clearance, state-specific anti-flipping windows for resale).
6. Compliance and audit (the silent backbone)
Every sensitive action you take is logged. The log is hash-chained, append-only, and exported nightly to S3 Object Lock — a worm bucket that cannot be modified by even the most privileged DBA. This is what makes the platform legally defensible. If a regulator opens an investigation five years from now, we can reproduce exactly what happened on any given day.
For your own actions, every entry has actor_user_id = your_id. Compliance officers query this through /admin/compliance (most agents do not have access to the admin console — that is intentional). They see the full chain of BBA signings, agency disclosures, search queries, offer submissions, rebate calculations, and license verifications you triggered.
License expiry mid-transaction? The system pauses the transaction at the next sensitive action and notifies you and your sponsoring broker. You can still view your dashboard and read old data; you just cannot transact until the broker re-verifies and re-activates your sponsorship. The audit chain ensures the freeze itself is recorded, so we can prove that no unlicensed activity slipped through.
7. When things go wrong
Steering language in your listing
You see a friendly error on the listing form pointing to the exact phrase and a one-line suggestion. Fix it and re-submit — there is no record of the rejected attempt in the public log, only an internal compliance review row. You are not in trouble; this is a guardrail, not a strike.
License lapsed
All sensitive actions block until your sponsoring broker re-verifies your license. You can still sign in and view your dashboard, and you can read old data, but every “create” and “update” action returns a friendly “license expired” banner. Talk to your broker; once they push the renewal record, the freeze lifts within a minute.
BBA expired mid-tour-window
New tour requests are blocked until renewal. Existing tours that were already on the calendar still happen — the gate is enforced at request time, not retroactively. Send the buyer a fresh BBA envelope from the client detail page; once it returns signed, the gate re-opens.
Sponsorship revoked
The most serious failure mode. Your agent_internal permissions cease. You can still sign in (the user account itself is not deactivated) but every transactional endpoint returns 403. Open transactions transfer to your former broker for wind-down. Reach out to platform support if you believe the revocation was in error.
8. Tips for high-volume agents
Use the inbox
/agent/inbox (v2) becomes your triage tool for incoming leads. Filter by state, by listing source, by “already has a BBA” vs. “needs onboarding,” and bulk-archive the noise.
Save searches with alerts
This is a buyer-side feature, but you can co-pilot with your buyer — sit next to them during onboarding and help them save the right search. Their saved-search alerts hit their email, not yours, but the BBA gives you visibility into what they are watching.
Templates for offers
v2. Today every offer is hand-keyed; the v2 template feature will let you save common financing and contingency stacks per state and reuse them with one click.
Mobile UX
The portal is fully responsive — every screen works on a phone. The new-listing form is the one screen where we recommend a tablet or laptop because of the photo upload step, but everything else (offers, clients, the dashboard) is built for one-handed phone use during a showing.
FAQ
Can I be sponsored by multiple brokers?
It depends on your state’s reciprocity laws and the active state_policy rules. Some states allow multi-state sponsorships; others forbid them. The system enforces the state-specific rules at sponsorship creation time, not at signup — so even if your form shows multiple brokers, the policy resolver may block the second sponsorship at the transaction layer. Talk to your designated broker before applying for a second.
What if I move to a different brokerage?
Your old sponsorship row is closed (its effective_to date is set); the new sponsorship row is created. Open transactions transfer to your new broker through a documented saga (v2). Until that saga ships, the manual process is: ask your old broker to sign the transfer form, ask your new broker to receive it, and the platform re-points the transactions on the next admin sync. The audit log records the transition with both broker IDs so the trail is preserved.
Can I take my client list with me?
Buyer Broker Agreements are between the buyer and the brokerage, not between the buyer and you personally. Whether a client follows you to a new brokerage is a contractual matter between the brokerages and (in many states) the buyer’s explicit re-consent. Talk to compliance before promising anything to a client during a transition.
Do I see other agents' clients?
No. assertAgentScope_I_VERIFIED_USER_OWNS enforces in code that an agent can only read their own clients, listings, and offers. Agent A cannot view Agent B’s clients even if they are sponsored by the same designated broker. Designated brokers and managing brokers see the aggregate, but the line-level scope is yours.
Where can I see my own audit trail?
Your sponsoring broker sees aggregate stats from /brokers/audit. Your specific events ship at /agent/profile/audit in v2. For now, ask compliance — they will pull your filtered slice from the master log on request, usually within one business day.
Ready to join?
Apply to be sponsored, get verified by your broker, and start operating from a portal that already has every compliance gate wired up. You focus on clients; we handle the plumbing.