📖 Full Documentation · 🌐 bizfirstai.com · 📚 docs.bizfirstai.com · 👥 Join the Community
An industry-vertical data platform for property listings, built by BizFirst.Ai — portable across CRM providers, designed to pair with Odoo (or a similar CRM/ERP) rather than duplicate it.
RealEstate is not a community node wrapping a third-party API. It's a full BizFirst product owning its own domain model, REST API, and database schema, so the listing data itself "stays portable across CRM providers" — the CRM/contact layer stays with Odoo (or another registered provider), reachable via the Odoo community node.
| Entity | What it is | Key operations |
|---|---|---|
| Property | The core listing — RESO-aligned address/geo/price/beds-baths/lifecycle-date fields | CRUD, classification/location/lifecycle search, external-CRM link, agent assignment |
| Agent | Lightweight local listing-agent directory — not a CRM contact record | CRUD, by-mls-id/name/office, match-or-create |
| PropertyMedia | Photos, floor plans, virtual tours, documents — content-addressed, bytes live in BizFirst's CID object store | CRUD, attach, set-primary, reorder |
| PropertyFeature | Typed amenity flags (Boolean/Text/Number) per property | set / set-many (upsert), remove |
| ExternalProvider | Lookup of CRM/systems a property can link to — seeded with Odoo | CRUD, ordered listing |
| PropertyType / PropertyCategory / ListingType / ListingStatus / MediaType / FeatureType | Classification/code-list lookups | CRUD |
Every Property can optionally link to a record in an external CRM via ExternalProviderID +
ExternalRecordID. RealEstate_ExternalProviders ships pre-seeded with Odoo ("Self-hosted
Odoo Community CRM") as row 1 — the schema's own design notes name Odoo, Twenty, and EspoCRM as the
kind of systems this table is meant to hold. RealEstate never queries a CRM directly, and the
Odoo community node never knows about
RealEstate_* tables — whatever syncs a property to a CRM record (an import job, a Flow Studio
workflow built on the Odoo node, a manual link) is the only thing that needs to know about both
sides. RealEstate is the real-estate-industry data layer; Odoo is an agent it can plug into for
CRM. See the Connecting to Odoo & CRM guide
for the full design.
src/
├── api/RealEstate/
│ ├── BizFirst.Ai.RealEstate.Domain/ # Entities, repository/service interfaces, WebRequests DTOs
│ ├── BizFirst.Ai.RealEstate.Service/ # Business logic (validation, cascades, upserts)
│ ├── BizFirst.Ai.RealEstate.Infrastructure/ # EF Core DbContext + repositories
│ ├── BizFirst.Ai.RealEstate.Api.Base/ # Abstract base controllers (route/auth attributes)
│ ├── BizFirst.Ai.RealEstate.Api/ # Concrete controllers, Program.cs, JWT auth, Swagger
│ └── BizFirst.Ai.RealEstate.Tests/ # Controller/repository/service tests
└── db/
├── tables/ # RealEstate_*.sql — schema
└── data/ # RealEstate_*.data.sql — seed data (lookups + the Odoo ExternalProvider row)
{
"ConnectionStrings": {
"RealEstateDatabase": "..."
}
}Falls back to DefaultConnection when RealEstateDatabase is absent.
builder.Services.AddRealEstateInfrastructure(builder.Configuration); // DbContext + all repositories
builder.Services.AddRealEstateServices(); // all servicesEvery route lives under api/v1/realestate/{resource}, JWT-bearer authenticated with
realestate:read / realestate:write / realestate:full claim-based policies.
- ✅ Full schema, seed data, and layered API (Domain/Service/Infrastructure/Api.Base/Api) for all 11 resources, with tests.
- ⏳ No frontend/UI yet — API + DB only.
- ⏳ No automated MLS/feed import pipeline — the API supports creating/updating listings (including the raw-feed agent fields), but pulling and mapping an external feed is not part of this repo.
- ⏳ No status-driven lifecycle-date stamping —
RealEstate_ListingStatuseshas no stableCodecolumn, soOnMarketDate/CloseDatestay caller-driven. - ⏳ Odoo sync is a one-directional pointer today (
ExternalProviderID/ExternalRecordID) — keeping a linked Odoo record and a Property in sync is expected to live in a Flow Studio workflow, not in this repo. - ⏳ Only Odoo is seeded as an ExternalProvider; Twenty and EspoCRM are named as future targets in the schema's design notes but have no integration yet.
- docs/README.md — entity/API reference (Pages homepage)
- docs/guide/ — full developer guide overview
- docs/guide/01-data-model.html
- docs/guide/02-properties-api.html
- docs/guide/03-agents-directory.html
- docs/guide/04-media-and-features.html
- docs/guide/05-lookups-and-code-lists.html
- docs/guide/06-connecting-to-odoo-and-crm.html
- docs/guide/07-input-output.html
- docs/guide/08-examples.html
- docs/guide/09-troubleshooting.html
- docs/guide/10-roadmap.html
- Full developer portal: docs.bizfirstai.com
BizFirstRealEstate is part of the BizFirst.Ai ecosystem — an AI-native workflow and integration platform. Explore the full developer portal at docs.bizfirstai.com, or join the conversation at community.bizfirstai.com.
Maintained by the BizFirst.Ai team.