Growth & configuration
What your exchangers see, how your practice is tracked, whose brand carries it, and what it connects to. Nothing on this page moves funds or changes a deadline.
One thing needs you today
An offering that failed qualification review is still visible to your exchangers
Sun Belt Industrial IV has been visible in Kestrel's marketplace since
Aug 6. The platform's qualification review returned Unqualified on
Aug 12 — the sponsor's Reg D filing lapsed and has not been refiled. Visibility
and qualification are two separate facts, and right now they disagree. The visibility switch
is yours; the qualification decision is not.
Waiting on you · 7 days
Marketplace
Replacement-property options your exchangers can see. You curate the platform catalog
and — if you sponsor your own — author listings. Every offering here is a
Reg D Rule 506(c) private placement, so what an exchanger may read depends
on where they are on the accreditation ladder.
Platform catalog
Offerings Open1031 lists. You decide which reach your exchangers.
Show only Kestrel's own listings
Off. Exchangers see the platform catalog plus anything you author. Turning this on
hides every platform offering at once and disables all eleven row switches
below — the per-listing choices are kept, not discarded, and come back when
you turn it off.
| Offering | Qualification | Visible to your exchangers | Action |
|---|---|---|---|
|
Sun Belt Industrial IV
Ashgrove Sponsors LLC · Industrial · Phoenix, AZ
Target 5.4–6.1% · $100,000 minimum
|
Unqualified
Reviewed Aug 12 by Open1031 platform review — sponsor's Form D lapsed Jul 31
|
Visible, but unqualified
On since Aug 6 · set by Sandra Osman
|
|
|
Gulf Coast Multifamily DST II
Fernbrook Capital Partners · Multifamily · Tampa, FL
Target 4.8–5.5% · $50,000 minimum
|
Qualified
Reviewed Jul 30 · PPM v3 on file · Form D current
|
Visible
On since Jul 31 · 14 exchangers have opened it
|
|
|
Cascade Medical Office Portfolio
Cobalt Harbor Realty Trust · Medical office · Portland, OR
Target and minimum withheld until review completes
|
In platform review
Submitted Aug 8 · 11 days · 2 of 4 sponsor documents received
Waiting on Open1031 platform review
|
Locked
An offering cannot be shown before its review returns. Not your call, and not a setting you can override.
|
|
|
Cobalt Harbor Net Lease VI
Cobalt Harbor Realty Trust · Net lease · multi-state
Target 4.2–4.6% · $25,000 minimum
|
Qualified
Reviewed Jun 18 · PPM v2 on file
|
Hidden by you
Off since Aug 3 · Sandra Osman · note: “concentration in one sponsor”
|
|
| Loading 8 more… |
Publication and qualification are two axes, and the console currently collapses them.
YourListingsTab renders a green Published pill whenever
publishedVersionId exists, regardless of qualifiedStatus — so an offering
that failed review still reads as healthy. Status here is derived from both facts plus the
review date and reviewer, never from one flag. That separation is a change to make, not one
already made.
Kestrel's own listings
Offerings you sponsor and publish under your own brand
None yet
Kestrel curates today, and sponsors nothing
That is a complete, valid configuration — most QIs never sponsor. If you do start
publishing your own replacement-property offerings, this is where they live and this
is what authoring gives you:
A versioned editor — every change is a draft until you publish a version, and the
published version is what exchangers read (ADR-020).
A public tombstone derived automatically from the published version — name,
sponsor, asset class, market. Never the target return, never the minimum.
The same qualification review the platform catalog goes through, with the same
two-axis status — you author it, Open1031 still reviews it.
What an exchanger can actually see
Public tombstone Open to anyone
Name, sponsor, asset class, market, hero image. No target return, no minimum
investment, no offering documents. Signed out, this is all a general
solicitation may show.
Self-attestation unlocks reading Exchanger's own act
The exchanger states their own basis under SEC Rule 501(a) and signs the
acknowledgement. That unlocks target returns, minimum investment and the
PPM. Open1031 has not verified the statement, and says so on the page.
Documentary or third-party verification Required before subscribing
Rule 506(c) requires the issuer to take reasonable steps to verify
accredited status — tax returns, a broker or CPA letter, or a third-party service.
Self-attestation is not verification and never becomes it by ageing.
Subscription Not available on this platform
No exchanger can subscribe to an offering here, verified or not. The marketplace
presents replacement-property options; it is not an offer to sell, not a
solicitation to buy, and not personalised investment advice. Subscription happens
with the sponsor, off-platform, under the PPM.
There is no control here that attests on an exchanger's behalf.
Accreditation is the investor's own statement and the issuer's verification duty —
a QI officer cannot supply either by proxy, for the same reason a coordinator cannot mark
identity verified for someone else and cannot sign a document on their behalf.
If an exchanger is stuck at the attestation rung, the only affordance is
send them the link.
Accreditation is a securities gate, not an identity gate. It sits
after KYC, never instead of it: an exchanger reaches any rung on this ladder only
once identity and OFAC screening have cleared. Nothing on this page can advance or skip that.
Advisor pipeline
Every active exchange where Kestrel is the intermediary, against the 45-day identification
window and the 180-day exchange period. Countdowns are computed from each exchange's own
identification and exchange deadlines — IRS §1031(a)(3) — not from a status field.
Clock trouble
Ordered by consequence — a passed statutory date first, because it is the only one that cannot be recovered
Ravensworth Trust
EX-2026-000188
45-day passed
Identification period ended Aug 15 with 0 of 3 slots used
and no designation notice signed. Sale closed Jul 1 and $2,140,000 is held in qualified
escrow — the funds are safe, the deferral is not. This row stays red no matter how
complete its documents are.
Waiting on you — disposition must be logged
4 over
45-day
Matt Belcher
EX-2024-0147
45-day Aug 22
1 of 3 identified. The designation notice is drafted and sent; the
exchanger opened it Aug 17 and has not signed. Nothing here can be signed for him.
Waiting on the exchanger · 2 days
3
days left
Okonkwo Holdings LLC
EX-2026-000212
180-day Aug 25
Replacement purchase is in escrow and has not closed. Title company
has not returned the preliminary report after three automated reminders.
Waiting on the title company · 8 days
6
days left
All active exchanges
Showing 5 of 34
Sorted by nearest deadline
| Exchanger / relinquished property | Stage | 45-day | 180-day | Escrow | Action |
|---|---|---|---|---|---|
|
Ravensworth Trust
1180 Bayside Loop, Everett WA · Delayed
Sale closed Jul 1 · $2,140,000
|
Identification — lapsed
0 of 3 slots used · no signed designation
|
4
over
Passed Aug 15
|
128
days
Moot while identification is lapsed
|
Held · $2,140,000
Wire confirmed Jul 1 · segregated account ····4182
|
|
|
Matt Belcher
4820 Marine View Dr, Tacoma WA · Delayed
Sale closed Jul 8 · $1,420,000
|
Identification — in progress
1 of 3 identified · notice sent Aug 16, opened Aug 17, unsigned
|
3
days
Aug 22
|
135
days
Jan 1, 2027
|
Held · $1,420,000
Wire confirmed Jul 8 · segregated account ····4182
|
|
|
Okonkwo Holdings LLC
2200 Industrial Pkwy, Kent WA · Delayed
Sale closed Feb 26 · $4,310,000
|
Purchase — in escrow
3 identified, 1 under contract, closing set Aug 24
|
✓
met
Signed designation filed Apr 10
|
6
days
Aug 25
|
Held · $4,310,000
Disbursement proposed Aug 18, awaiting a second officer
|
|
|
Delgado, Maria & Luis
88 Harbor Point Rd, Bellingham WA · Reverse
Parked with the EAT since Jun 12 · $986,000
|
Parking — EAT holds title
QEAA executed Jun 12 · 5-business-day clock satisfied
|
✓
met
Identified Jul 27, signed
|
117
days
Dec 9
|
None held
Reverse — no relinquished proceeds yet; sale not closed
|
|
|
Hargrove Industrial LP
17 Foundry Row, Spokane WA · Improvement
Sale closed Mar 30 · $6,750,000
|
Construction — draw 3 of 6
Improvements must be in place by the 180th day to count
|
✓
met
Signed designation filed May 12
|
37
days
Sep 25
|
Held · $2,105,400
$4,644,600 released across 2 approved draws
|
|
Every row here has to land somewhere useful; today none of them do.
QiPipelineView ships both row buttons — Share Docs and Open —
with disabled and a tooltip saying they are not wired, so the densest table in
the console is a dead end. The deep links above go to the section the deadline concerns
— Identification, Purchase, Parking, Construction — never to an Overview tab the coordinator
then has to navigate out of.
Where the 34 sit
Sale
6
4 under contract
Identification
9
2 inside 7 days
Escrow
7
$18.41M held
Purchase
8
3 closing this week
Disbursement
3
2 awaiting a 2nd officer
IRS 8824
1
Draft prepared
Stage is wayfinding, not status — it says which leg of the exchange a file
is on, never whether that leg is healthy. Health lives on the deadline and escrow columns,
where it is derived from dates and receipts.
How these figures are derived
Countdowns
From each exchange's stored identification deadline and
exchange deadline, not from a stage field. A file that has slipped shows
the slip.
Met vs passed
A 45-day clock reads met only when a signed designation
notice exists on or before the date. Passed with nothing signed reads
lapsed and stays red — it never turns green with age, and no other
column can outvote it.
Escrow
From confirmed wire receipts against the segregated account, plus any
approved disbursements. Never a boolean. A closed sale holding funds
cannot render as “nothing submitted”.
Completed YTD
There is no completion
source wired. It renders as an em dash with the reason, never as a zero — a zero is a
claim, and this one would be false.
If the queue is down
The shipped view falls back to placeholder rows behind a
Live queue unavailable pill. Placeholder data must never be presented as a
book of business — the fallback is an error state, not a demo mode.
White-label branding
Two separate bindings, and confusing them is a legal problem rather than a design one.
Your brand is bound to the software platform and is configurable here.
The Qualified Intermediary of record is bound separately, is not
configurable here, and determines whose licence, whose bond and whose escrow carry the
exchange.
Binding 1 · configurable here
Brand — the software platform
Kestrel Exchange Services is the brand an exchanger sees on every screen,
document and notification.
Bound to
The organization record. One brand per org, resolved from
the session's org context — not from the hostname.
Carries
Logo (light and dark), favicon, primary and accent colour, legal name on
documents and reports, support email, and the slug login route.
Mechanism
Token-driven, never hardcoded colour.
BrandingProvider converts
your hex to HSL and writes --primary, --primary-foreground,
--ring, --primary-strong, the --teal-* ramp and
--accent onto :root. Every component reads the token, so one
variable repaints the app in both themes.Who may change it
Org admins. Every change is audit-logged with the actor and the previous
value.
Binding 2 · not configurable here
Qualified Intermediary of record
The licensed intermediary that signs the exchange agreement and holds
the funds. Today, for every org, this is Open1031.
Bound to
Nothing per-org.
qiOfRecordName resolves to the module constant
PLATFORM_QI_OF_RECORD_NAME; there is no column, no field and no admin control.
Determines
Who signs the exchange agreement and the assignments, whose bond
covers the funds, whose segregated escrow holds them, and whose name goes on the
intermediary line of Form 8824.
Why it is locked
Naming a partner here would assert that their licence and
their bond cover funds that Open1031's escrow actually holds. That is a false
statement to an exchanger and to a state QI regulator, so the field is read-only until the
binding is real.
To make it real
A per-org
qi_of_record_legal_name plus a state-licence and bond
record, escrow accounts owned by that entity, and the constructive-receipt analysis redone
for it. That is a legal gate before it is an engineering one.
The marketing site and the product currently disagree, and only one of them can be right.
ForQiPage promises “You remain the QI of record” and “your escrow, your officers”;
MarketingHomePage closes with “You stay the QI of record.” The product binds
Open1031 as QI of record for every org and renders that in the exchanger footer. Either the
per-org binding above ships, or the marketing copy changes to describe the managed-QI model it
actually is. Leaving both live is a misrepresentation to a prospect and, once an exchange is
open, to an exchanger.
Organization details
These fields print on documents and reports
Kestrel Exchange Services
Set when the org was created. Renaming an org changes what is printed
on documents already issued, so it is a platform-support action with an audit trail.
Kestrel Exchange Services, LLC
Used as the signatory name in documents and in the
copyright line of the exchanger footer.
exchanges@kestrelexchange.example
Shown to exchangers on every notification. Validated as an email
before save.
kestrel
app.open1031.ai/o/kestrel/login
Lowercase letters, digits and hyphens. The console currently
previews the wrong path — it renders
/org/{slug},
but the only branded route that exists is /o/:slug/login.
A partner who copies the hint gets a 404.
Brand colours
Applied to filled buttons, nav active states, progress and links
Primary Platform default — unset
#0f766e
Button label resolves to white at 5.5:1 — clears WCAG AA for body text.
Accent Pasted, not saved
#d97706
Would ship at 3.2:1. The platform picks a white label for this
fill because its luminance is under the 0.5 threshold — but a dark label on the same
fill measures 5.4:1. The label choice is a coin-flip, not a measurement.
The label colour is computed, but never measured.
foregroundFor() returns white when relative luminance is below
0.5 and dark otherwise. The sRGB flip point is nearer 0.18, so
mid-tone brands — ambers, oranges, mid greens — get a white label that fails AA on the
partner's own primary button. The fix is to pick the foreground with the higher measured
ratio and to refuse a save that cannot clear 4.5:1 either way.
Logo & favicon
Uploaded to object storage and served publicly to this org's portal
Light logo
Shown on white and light surfaces · SVG 24 KB · uploaded Aug 11 by Sandra Osman
In use
Dark logo
Shown on the dark console rail and in dark theme. Not uploaded —
the light logo is being used instead, which renders low-contrast on the rail for every
exchanger who prefers dark.
Waiting on you
Falling back
Favicon
ICO or PNG, 32 × 32 minimum · uploading kestrel-mark.png
Previous attempt failed at 9:04 AM. The file was 41 × 30 px —
below the 32 × 32 minimum on one edge. Nothing was overwritten; the existing favicon
is still live.
Uploading · 68%
Live preview
Branded sign-in
Kestrel Exchange Services
Welcome back
Sign in to manage your 1031 exchange.
Powered by Open1031
Exchanger dashboard
Kestrel
Overview
Documents
Escrow
Days to identify
3 · by Sat, Aug 22
Sign the designation notice — it is the only thing left.
Footer as it renders to your exchangers
Kestrel Exchange Services is the software platform. The licensed Qualified Intermediary
of record is Open1031 under IRC §1031. Exchange funds are held in segregated, qualified
escrow accounts. Not tax or legal advice.
This sentence is not editable, and no branding setting removes it. Deleting it, or
substituting the partner's name for Open1031, would tell an exchanger that a different
entity's licence and bond stand behind their money. The copyright line above it does carry
your legal name — Kestrel Exchange Services, LLC — because that is a true
statement about the software brand.
The preview paints from
--primary, exactly as BrandingProvider writes
it. Kestrel has not set a custom colour, so the swatches here resolve to the platform default
and follow the theme; once a hex is saved, both themes take that hex.
Integrations
External systems your exchanges talk to. Every connection is brokered by a durable Vectr
workflow — the browser never holds an OAuth token or a provider key, and every state change
writes an audit-log entry.
Connection state does not survive a reload today.
IntegrationsSection holds status in React state seeded to
not_connected; the connect action emits
open1031.integration.*.connect to Vectr and then flips a local variable. Refresh the
page and every card claims it is disconnected while the workflow is still running. Everything in
the Health column below depends on the persisted connection-status endpoint that would
fix this, and is marked accordingly.
Connector catalog
Listed by what it does for an exchange, not by vendor
| Capability | Status | Health | Whose move | Action |
|---|---|---|---|---|
|
Deadline calendar sync
Microsoft 365 · Microsoft Graph
Writes each 45-day and 180-day date into the assigned coordinator's calendar
|
Connected
Since Jul 22 · authorised by Sandra Osman
|
Last successful sync today 6:02 AM · 34 events written
Next run tonight 6:00 AM · token renews Oct 4
Errors, 24 h: checking
|
Nobody — healthy |
|
|
Title-data pull
Title provider API · configured per office
Pulls commitments, vesting and lien data into the exchange package
|
Connecting
Requested today 9:12 AM · workflow run wf_8c41d2
|
No successful call yet — the handshake has not completed.
Vectr has retried twice; the provider is waiting on tenant consent from an
administrator on your side.
|
Waiting on your IT admin |
|
|
Entity formation
Entity-formation API
Forms the LLC or holding structure that will take title to replacement property
|
Not connected
Never connected for Kestrel
|
Nothing to report until it is connected. Once it is, this cell shows the last successful
call, when the credential expires, and the error rate over 24 hours — the three facts that
tell you whether an integration is actually working, rather than whether somebody once
clicked Connect.
|
Nobody — not in use |
|
|
CRM intake
Signed inbound API · configured on its own surface
Your CRM posts new exchanges; each lands in the CRM Intake queue for acceptance
|
Connected
Receiving since Jun 30 · 4 exchanges waiting in intake
|
Last accepted payload today 8:47 AM
1 rejected in 24 h — signature mismatch, retried and accepted
|
Waiting on you · 4 to accept |
|
The catalog is keyed by capability; the vendor is a detail underneath it.
The shipped
CONNECTORS array hardcodes three named vendors, so a partner who uses a
different title provider sees a competitor's name in their own console and a capability they
cannot switch on. Naming the capability first makes the row true for every office, and leaves
the provider as configuration.
What happens when you press Connect
Step 1
The console emits
open1031.integration.<connector>.connect to
Vectr with the org id. No credential is collected in the browser.Step 2
A durable Vectr workflow runs the OAuth handshake and the credential exchange,
retrying on its own schedule. The row reads Connecting for as long as that
takes — hours is normal when tenant consent is involved.
Step 3
Vectr persists the connection and writes an audit-log entry naming the actor,
the connector and the outcome.
Never
An integration cannot move funds, approve a disbursement, sign on anyone's
behalf, or satisfy a deadline. A calendar entry is a reminder, not evidence
that an identification was made.
Build contract — growth & configuration
1 · Four nav entries, one page, four separated sections. Marketplace, Advisor
pipeline, Branding and Integrations are configuration and growth, not queue work. Keeping them out
of Action Required is what lets that group stay trustworthy. Section separation is a rule
and a heading — never four different accent hues, because colour on this product means hub
wayfinding or status, and inventing a fifth meaning breaks both.2 · Exactly one primary emphasis, and it earns the colour. One offering is visible to exchangers while its qualification review says Unqualified. That is the only
btn-primary on the surface. Every other action — connect, upload, sync, hide, show — is
a neutral button. If a second thing ever deserves primary, the first has stopped deserving it.3 · Status is derived from two or more facts, never one flag. A marketplace row carries publication and qualification as separate axes, each with its decision date and decider.
YourListingsTab currently renders green Published whenever
publishedVersionId exists regardless of qualifiedStatus; that collapse must
go. A pipeline row derives its clocks from the stored identification and exchange deadlines and its
escrow line from confirmed wire receipts — a closed sale holding funds can never render as
“nothing submitted”.4 · A passed statutory deadline never renders as satisfied. It stays red, it keeps the word passed, and no adjacent column — complete documents, cleared KYC, funds safely held — is allowed to make the row look healthy. Green means a signed designation exists on or before the date; nothing else earns it.
5 · Waiting-on is attribution, not decoration. Every row that two parties can act on names whose move it is: you, the exchanger, the title company, your IT admin, or Open1031 platform review. “Locked” rows say who holds the decision and that you cannot override it.
6 · The 506(c) ladder is four rungs and the fourth is shut. Public tombstone → self-attestation unlocks reading → documentary or third-party verification is required before any subscription → subscription is not available on this platform. No console control attests or verifies on an exchanger's behalf: accreditation is the investor's own statement and the issuer's verification duty, the same principle that forbids marking identity verified by proxy or signing a document for someone else. Accreditation sits after KYC and never substitutes for it.
7 · Branding is two bindings and the second one is locked. The branded org is bound to the software platform; the Qualified Intermediary of record is bound separately and today resolves to the constant
PLATFORM_QI_OF_RECORD_NAME for every org. The
exchanger footer sentence — “<org> is the software platform. The licensed Qualified
Intermediary of record is Open1031 under IRC §1031.” — is not editable and no branding setting
removes it. Two follow-ups fall out of this: the marketing pages that promise “you stay the QI of
record” contradict the product and one of the two must change; and the slug hint in the console
prints /org/{slug} when the only branded route is /o/:slug/login.8 · Brand colour is token-driven, and the token has to be measured.
BrandingProvider writes the partner hex into --primary and its ramp, so no
component ever hardcodes a colour and both themes follow. But foregroundFor() flips the
label at luminance 0.5 where sRGB flips near 0.18, so mid-tone brands ship
a white label at roughly 3:1 on their own primary button. Pick the foreground with the higher
measured ratio and block a save that clears 4.5:1 in neither direction.9 · Integrations are brokered, and health is evidence. Connect emits a Vectr event; the browser never holds a token; every state change is audit-logged. The catalog is keyed by capability so a partner never sees a competitor's name in their own console. Health means last successful call, credential expiry and 24-hour error rate — not a badge that somebody once pressed Connect. All of it depends on a persisted connection-status endpoint, which is why the column is dashed: today status is React state that resets to Not connected on reload. CRM intake appears once here as a row and links to
surfaces/qi-crm-sync-settings.html;
its settings are not duplicated.10 · Nothing on this surface can move money or satisfy a deadline. No approval control, no disbursement path, no exchanger-facing authorisation. Fund movement stays where the firewall is: two authorised officers, the approver never the proposer, and the exchanger never in the path at all.
Light and dark are both designed. All names, orgs, amounts, references and dates are synthetic.