HELOC for Business process
Status: canonicalLast updated: 2026-09-06
Scope
Funding Machine supports an assisted-booking business-purpose HELOC process. The Operator and Applicant attend a call with the 7 Figures fulfillment team, which owns lender fulfillment. Funding Machine does not call the Figure API or send Applicants to a direct-apply link. The full experience is gated by the location-scoped Labs featureheloc-for-business, which is visible and enabled by default (FM-2497). The
Labs toggle remains the rollback: when the feature is turned off, the product
is Coming Soon and no form, product selection, workflow, or funding category
is available.
Lifecycle
- The Applicant submits the Operator’s application.
- Funding Machine automatically derives a HELOC Prescreen from the selected credit report and the application-submitted address.
- The Operator or Applicant completes Eligibility Confirmation.
- An Eligible confirmation unlocks HELOC in the product plan.
- The Operator completes the HELOC workflow and schedules a call attended by the Operator, Applicant, and 7 Figures fulfillment team.
- Confirmed or booked files enter the separate HELOC fulfillment queue.
- The fulfillment team maintains the HELOC funding row through funding.
- The Operator sends the consulting fee invoice. HELOC never contributes to the MFM 15% processing-fee basis.
Stage 1: HELOC Prescreen
Inputs:- FICO from the credit report
- mortgage-family tradeline present on the report (homeowner proxy)
- stated-income DTI from
underwritingResults.dti - state from the address submitted on the Operator’s application
ineligible result. A missing mortgage, an
ineligible or unknown state, DTI above 45%, or unavailable inputs produce
not_prequalified_soft. Soft results explain that a paid-off home may not show
a mortgage, another property may be in an eligible state, and 25% of business
income may improve verified DTI. The confirmation form can overturn them.
A clean screen is prequalified, pending Eligibility Confirmation. It is not a
credit decision or offer.
California remains disabled. State eligibility is the Figure SMB matrix dated
2026-05-12 in lib/funding/helocStateEligibility.ts.
Stage 2: Eligibility Confirmation
One location-and-contact scoped record stores:- property state
- primary residence yes/no
- mortgage balance
- estimated home value
- existing liens
- verified personal monthly income
- average monthly business income
- percentage of the business owned by the Applicant
/heloc/eligibility?token=… link. This is a Funding Machine portal, not a CRM
form. Every Operator read and write is scoped by locationId; client submission
is authorized by the single-use token. Preparing a new link creates a pending
token and does not revoke a previously delivered active link. Only successful
delivery activates the prepared link and retires earlier delivered active links
for the contact. Expiry is checked against the server clock, and the link stops
rendering the form when Labs is later disabled for the location. A successful
submission retires the link as submitted, so it cannot be reused.
Definitive calculation
- FICO floor: 640 primary residence; 680 non-primary
- DTI: monthly credit-report debts divided by
verified personal monthly income + 25% × average monthly business income × (business ownership percentage / 100) - Maximum DTI: 45%
- CLTV: 85% primary; 70% non-primary
- Estimated HELOC:
CLTV × estimated home value − mortgage balance − additional liens - Minimum estimated HELOC: 35,000 in Texas
- State and state-specific occupancy restrictions must pass
eligible or ineligible. Estimated amounts are
Operator-facing only.
The Operator dialog states the verdict where it was submitted — it stays open
after submit and shows the verdict, reasons, estimated line, verifiable annual
income, and recomputed DTI — and the HELOC tile badges that verdict once the
form has decided. The prescreen also displays its badge, reasons, mortgage
evidence, application-state source, and next action directly on the tile.
A pass reads Potentially eligible, with property and equity still unconfirmed.
Historical mortgage accounts do not establish current ownership.
The Operator form previews the estimate, qualifying income, and DTI from the
current answers. Ownership is explicitly entered when business income is used.
New confirmations snapshot the source report, credit score, monthly debts,
stated personal income, and annual business revenue. If these change, the
Operator must re-check eligibility before plan selection; the server enforces
the same check. Legacy records remain readable, but those using business income
without ownership must be updated. HELOC does not join plan totals or fees.
The Operator’s property-state picker groups states by the matrix (eligible,
eligible with conditions, not eligible) and names the consequence of the
selected state before submission. The tokenized Applicant portal keeps a flat
state list and shows no verdict: the approved-state footprint is confidential
partner material and the restriction wording is Operator phrasing.
Worked fixture from the underwriting sheet:
- home value: $300,000
- primary mortgage: $205,000
- primary-residence CLTV: 85%
- Estimated HELOC: $50,000
- personal monthly income: $8,000
- average monthly business income: $20,000
- business ownership: 100%
- verifiable annual income:
(8,000 + 25% × 20,000 × 100%) × 12 = $156,000
Product, workflow, and fulfillment
HELOC is selectable only when Labs is enabled and the latest Eligibility Confirmation is Eligible. The server rechecks both facts when the plan is confirmed. The standalone workflow is:- Review & approve underwriting
- Send client agreement
- Review signed agreement
- Schedule / attend call with the 7 Figures fulfillment team — the Operator and Applicant must both attend
- Wait for HELOC to fund
- Send consulting fee invoice
ZWGlqBxQtZfvgatXjffj in the admin
Location pinned by HELOC_FULFILLMENT_ADMIN_LOCATION_ID in
lib/helocBooking.ts, which can happen before confirmation.
The queue deliberately presents three independent concepts:
- Appointment is live CRM calendar time and disposition.
- Fulfillment status is the persisted, manually managed workflow stage on
the HELOC funding plan (
fulfillmentStatus). It is shared with the contact file and is not inferred from appointment disposition. - Funding result is the HELOC funding row’s financial
statusandamount.
helocTaskId) on the HELOC
funding plan. The assigned user works that task in the Location’s CRM
Action Center (the same task feed shown on the Funding Machine dashboard).
Signed appointment webhooks durably enqueue a Convex-scheduled worker. That
worker re-reads the exact appointment, selects the canonical call, resolves the
file, and creates/reconciles the task without any queue viewer. Queue GET is
strictly read-only. A separate durable task-event worker also performs an
authoritative GET /contacts/:contactId/tasks/:taskId and projects only the
returned completed boolean to helocTaskStatus; it never trusts completion
from the wake payload and never changes fulfillmentStatus or financial
status.
The sweep records helocTaskStatusReconcileAt when it enqueues each plan so
retrying or blocked provider reads rotate behind unswept completed plans
without falsely advancing taskProjectionSyncedAt.
Each running reconciliation has a durable lease and scheduled watchdog. A
worker interrupted by a deployment, timeout, or process failure is reclaimed
within the bounded attempt budget instead of remaining running. Every
reclaimed run receives a new claim token; an expired worker cannot cancel or
finalize its replacement’s watchdog/job state. The
appointment refresh signal also requires a verified session identity bound to
the requested Location (or verified global admin access) before its Labs gate;
knowing a Location ID is not authorization.
The canonical appointment’s admin-calendar assignee maps by unique email to a
user in the file’s Location; the two Location-specific user IDs are never
reused across identity spaces. Unmapped, duplicate, unavailable, missing-scope,
and task-read failures display Unassigned or a task sync error with a retry
action. A manual task-owner override remains sticky until an admin selects
Use calendar. Cancellation and no-show retain the owner, update the open
task for follow-up, set followUpNeeded, and do not complete the file. A small
Suggested hint may still derive from live appointment/funding facts, but it
is not workflow state.
Task creation is idempotent by the stored task ID plus an
[FM_HELOC_PLAN:<planId>] marker plus an atomic per-plan lease/revision fence.
If the CRM accepts a create without returning an ID, automatic recreation
pauses for the whole file (including after reschedule/reassignment). The same
durable guard remains when transport drops the response, the provider returns
5xx, or a worker stops after persisting its create attempt; these outcomes may
have committed and are not treated as definitive rejection. Later background
reconciliation adopts one marker, while duplicate markers stop visibly.
Affirmative 4xx rejection clears the attempt guard for bounded retry. Retry
task sync is an explicit protected POST. Task writes run only when the
existing token proves locations/tasks.write; sync never expands permissions.
External task updates are fenced both before and after the awaited CRM request.
If a write finishes after a newer owner/file revision, the stale worker cannot
mark the file synced and durably queues another canonical-appointment reconcile.
This makes the last late external completion cause a newest-state pass rather
than leaving CRM assignment behind the sticky manual owner. Successful updates
are also re-read before helocTaskSyncState becomes synced; title, body/file
marker, normalized due date, completion, and owner must all match the intended
projection. A missing or mismatched authoritative projection remains a visible
sync error with the protected retry path.
Durability starts at webhook ingress, before the watchdog exists. A transient
Convex enqueue failure for the pinned HELOC calendar returns a retryable non-2xx
response from both appointment entry points so the provider can redeliver it.
Duplicate or stale redelivery remains an idempotent success. Appointment events
for other calendars retain the existing delegated acknowledgement behavior.
The primary marketplace documentation lists exactly TaskCreate,
TaskComplete, and TaskDelete task webhook events. The marketplace webhook
route accepts those documented strings through its provider Ed25519 signature
path as authenticated wakes for stored HELOC tasks. TaskComplete contains no
completion boolean or update-version timestamp; dateAdded is not treated as
one. Duplicate deliveries are durably deduplicated; exact Location, Contact,
task ID, and HELOC plan identity must match before a job is scheduled.
TaskDelete followed by a 404 blocks visibly while retaining the stored task ID
and last known open/completed projection; there is no invented cancelled
task status.
Live acceptance requires subscribing at least TaskComplete on the existing
marketplace destination /api/lb/webhook; subscribe TaskDelete for automatic
deleted-task visibility and TaskCreate for the additional creation wake.
Primary docs do not list TaskUpdate or TaskReopen, and TaskComplete is
called only when a task is completed, so it is not claimed as a reopen wake.
Instead, a default-off Convex cron scans at most the 100 stalest plans currently
projected completed every 15 minutes and enqueues the same authoritative task
read. Fifteen minutes is the sweep invocation interval, not a per-record
worst-case latency. With C eligible completed plans, batch size B = 100, and
a stable population, every plan is selected within
ceil(C / B) × 15 minutes. The separate
helocTaskStatusReconcileAt advances whenever a plan is considered, including
when an existing job is pending/running/retrying or a blocked job is requeued;
failed checks therefore rotate without falsely changing
taskProjectionSyncedAt.
The selected batch dispatches immediately. A selected record whose provider
read fails transiently can add retries at 1, 5, 30, and 120 minutes (156
minutes total), so eventual successful convergence is bounded by the population
selection bound plus that retry budget when the provider recovers. An
interrupted claim is reclaimed after its 15-minute lease within the
five-attempt budget. A permanently unavailable connection has no finite
per-record convergence guarantee, but it cannot prevent later records from
being selected on subsequent sweeps.
The automatic sweep requires deployed schema/functions, a valid Location task
read token, and explicit
HELOC_TASK_STATUS_RECONCILE_ENABLED=true. It ships disabled and is not
production configuration authorization. Protected Retry remains an additional
re-read path, not the reopen design.
Vercel runs convex deploy only for a production build. A successful PR
preview runs the Next.js build without deploying this branch’s Convex schema or
functions, so preview success does not prove that the preview frontend has a
matching backend. Release preflight must verify a distinct preview Convex
target and matching APP_URL / internal-secret configuration before any
end-to-end acceptance or production enablement claim.
Fee treatment
HELOC funding rows are excluded from funded and pending MFM processing-fee basis calculations. Therefore they create no team-attributable entitlement and no HELOC processing-complete fee line. An Operator may still use Funding Machine’s invoice conveniences for the client consulting fee.Sources and precedence
- Underwriting sheet, 2026-08-24: 640/680 FICO floors, 45% DTI, 25% business income credit, CLTV and equity math.
- Ty Talbot workflow guide, 2026-07-23: assisted fulfillment and HELOC fee exclusion.
- Figure SMB Product Guide, approved-state list dated 2026-05-12: state matrix.
Deliberately open
- RentCast or another home-value API may replace manual estimated value later.
- A Figure API integration may be evaluated later.
- Neither item is part of the current assisted-booking launch.

