# Admin/CMS Competitive Study — WordPress Brokerages + Aggregator Advertiser Back-Office Clean-room, public-data-only research into the ADMIN/CMS surface of two Philippine WordPress real-estate brokerage sites and one aggregator advertiser platform, to inform the future admin/CMS roadmap of `property-portal`. **Targets:** Presello (`presello.com`), Property Source PH (`propertysourceph.com`), Thribee/LIFULL Connect (aggregator advertiser console for Trovit/Mitula/Nestoria/Nuroa). **Method:** `robots.txt`, WordPress core `/wp-json/` discovery, page-source plugin/theme fingerprinting, XML sitemaps, and Thribee's public marketing + Zendesk help-center documentation. No login, no credential submission, no user enumeration via `/wp-json/wp/v2/users`, no access to disallowed paths. All dates observed 2026-07-11. --- ## 1. Admin surface overview **Presello** and **Property Source PH** are both classic **wp-admin CMS** setups: content editors log into `/wp-admin/`, and the real-estate-specific admin experience is bolted on by page-builder/CPT plugins rather than a purpose-built real-estate back office. Presello layers **Toolset** (Types/Views/Forms/Blocks) on top of wp-admin to define the `property` custom post type, its taxonomies, and (per Toolset's own product docs) optional **front-end submission/edit forms** for agents. Property Source PH instead uses the lighter-weight **Custom Post Type UI (CPT UI)** plugin to register `for_sale`/`for_lease`, with OceanWP + a child theme (`iproperty`) for presentation — there is no evidence of a page-builder-driven visual admin layer comparable to Elementor Pro/Toolset. Both are single-tenant WP installs; there is no visible multi-brokerage/marketplace admin layer. **Thribee** is a completely different animal: it is not a CMS at all but a **SaaS advertiser console** (login-gated single-page app at `thribee.com`) that sits *downstream* of a portal's own CMS. A portal/agency's "admin" interaction with the aggregator side is: (a) host an XML listings feed (or accept a crawler) that Thribee/LIFULL Connect's aggregators (Trovit, Mitula, Nestoria, Nuroa) pull from, and (b) use the Thribee dashboard to manage CPC/CPA/CPM bidding, budgets, and campaign analytics on the *paid traffic* Thribee sends back to the portal's own site. There is no content-authoring surface in Thribee — the "content" is the feed, generated by the portal's own CMS/database. --- ## 2. Discovered entry points ### Presello | Surface | URL | Observation | |---|---|---| | wp-login | `https://www.presello.com/wp-login.php` | HTTP 200 — exists, default WP login active (not hardened/hidden) | | wp-admin | `https://www.presello.com/wp-admin/` | HTTP 302 (redirects to login) — exists | | Front-end login | `https://www.presello.com/login/` | HTTP 200 — custom page hosting a **Profile Builder** shortcode form (`id="wppb-loginform"`, action posts back to itself), with reCAPTCHA. This is the front-end account surface for site visitors/agents, distinct from wp-admin | | Favorites | `https://www.presello.com/my-list/` | "My List" saved-listings feature, linked from main nav | | REST discovery | `https://www.presello.com/wp-json/` | Public, returns full namespace + route map | | robots.txt | disallows `/wp-admin/`, allows `/wp-admin/admin-ajax.php`, disallows `/wp-content/uploads/wpforms/` (WPForms plugin present, uploads hidden from crawlers) | | ### Property Source PH | Surface | URL | Observation | |---|---|---| | wp-login | `https://propertysourceph.com/wp-login.php` | HTTP 302 → `/404` — **default login URL is disabled/hidden** (typical of a security-hardening plugin; Wordfence is present per fingerprint but hiding wp-login is usually a separate plugin such as WPS Hide Login — not directly identified, inferred) | | wp-admin | `https://propertysourceph.com/wp-admin/` | HTTP 302 — also gated | | robots.txt | disallows `/wp-admin/`, `/wp-login.php`, `/my-account/`, `/cart/`, `/checkout/`, `/*add-to-cart=*`; allows `admin-ajax.php`; declares `Sitemap: https://propertysourceph.com/sitemap_index.xml` | The `/my-account/`, `/cart/`, `/checkout/` blocks confirm a **dormant WooCommerce** install (customer-account/cart/checkout flows exist in the codebase but are deliberately de-indexed and not part of the live product) | | REST discovery | `https://propertysourceph.com/wp-json/` | Public | ### Thribee (aggregator advertiser console) | Surface | URL | Observation | |---|---|---| | Marketing/homepage | `https://thribee.com/` | HTTP 200, page `` is literally **"Partners Admin - Thribee"** — confirms this domain *is* the admin console shell, served as a JS SPA (`trovitApp`, bundle assets under `/includes/dist/*`, Sentry release tag `thribee@c061a4a1` observed in page source) | | Login | `https://thribee.com/index.php/cod.login` | Found via web search of Thribee's own site links; not fetched (login form, no credential interaction attempted) | | Webhook config (in-app) | `https://thribee.com/index.php/cod.webhooks` | Referenced from help docs as where advertisers configure real-time lead webhooks | | Conversion Tracker docs | `https://thribee.com/index.php/cod.tracking_conversion_tracker` | Referenced from help docs | | Legacy "Partners" insights | `https://partners.trovit.com/index.php/cod.insights-duplicated` | Referenced from help docs — indicates Thribee unifies what were previously separate per-brand "Partners" consoles (`partners.trovit.com`, presumably `partners.mitula.com`, etc.) under one product | | Help center | `https://help.thribee.com/hc/en-us` | Zendesk-hosted; public articles, no login needed to read | | Account provisioning | none (no public self-service signup form found) | Access is **sales-gated**: "Once you publish your ads at one of our sites, you get access to Thribee by contacting us at `thribee.salesinfo@lifullconnect.com`" (Access to Thribee article). There is no self-serve "Sign up" flow — an ads/feed relationship must exist first | --- ## 3. Role & account model **Presello (WordPress roles, inferred from plugin stack):** Standard WP roles (Administrator/Editor/Author) apply to wp-admin content management. Toolset Access (not directly fingerprinted but a standard Toolset companion for real-estate builds) is the mechanism Toolset's own documentation recommends for restricting what agent-level users can edit — **not observed** whether Presello actually uses Toolset Access, only that Toolset Forms is present, which enables front-end submission without necessarily restricting it to a distinct "agent" role. **Profile Builder** is the plugin governing the front-end account system (`/login/`, presumably `/register/` and `/my-account/`-style pages, not directly crawled) — Profile Builder's product purpose is precisely to let site owners define custom front-end user roles (e.g., "Agent") and let those users log in/register without touching wp-admin. This strongly suggests Presello's model is: **wp-admin staff roles** (content/marketing team) **+ a separate Profile Builder front-end role** for buyers to save favorites ("My List") and, potentially, for agents to submit listings via Toolset Forms. Not observed directly: an actual agent-facing submission form (would require an authenticated session to reach). **Property Source PH:** No front-end registration/login plugin fingerprint found (no Profile Builder, no BuddyPress/Ultimate Member markers). WooCommerce is present but its account pages are deliberately de-indexed and not evidently part of the live product. Role model appears to be **wp-admin-only** (staff roles), with public users interacting purely as anonymous visitors submitting Contact Form 7 leads — **not observed**: any customer/agent self-service account system. **Thribee:** Roles are **organization/advertiser-account-level**, not observed to be granular multi-user (no mention of "team members," "seats," or permission tiers in the public docs). One notable design point: "You don't have to be a client to see how your Ads are performing" — implying accounts can exist and show read-only performance data even before a paid campaign is active, but the account itself must still be manually provisioned by a Thribee/LIFULL salesperson or "Country Manager" (referenced in the Campaign Objectives article for Maximize Conversions access requests). Billing is **per-brand**: a single advertiser account can run campaigns on both Trovit and Mitula but receives two separate monthly invoices, one per brand. --- ## 4. Admin feature inventory ### Presello (wp-admin + Toolset) - **Listing management:** Toolset Types custom post type `property` (not exposed via REST — `/wp/v2/types` does not list it, only its taxonomies are REST-enabled, which is the Toolset default of `show_in_rest=false` on the CPT itself), with taxonomies `property-location`, `property-status`, `property-type`, and `ownership-status`, all REST-browsable (`/wp/v2/property-location`, etc.). Toolset Views/Blocks render listing archives/search on the front end; Toolset Forms (per Toolset's own real-estate course docs) is the mechanism for **front-end agent submission/edit**, avoiding wp-admin entirely for that workflow — **presence of the `toolset-forms` plugin path confirmed on Presello**, but an actual live submission form was not observed (would require an authenticated crawl). - **Media:** Standard WP media library; no DAM plugin fingerprinted. - **Messaging/lead capture:** `wp-whatsapp` / `click-to-chat-for-whatsapp` plugins plus a custom REST-exposed `whatsapp-accounts` post type (`/wp/v2/whatsapp-accounts`, HTTP 200 on schema discovery) and a `wpa-helper` type — i.e., Presello has built (or installed) **WhatsApp account management as first-class admin content**, letting staff maintain multiple WhatsApp numbers/routing from within wp-admin. WPForms is also present (uploads path blocked in robots.txt) for general contact forms. - **Favorites:** "My List" (`/my-list/`), tied to the Profile Builder front-end account. - **A/B testing:** `bt-bb-ab` plugin + `bt_bb_ab_conversion` REST namespace — a Bricks/Elementor-adjacent split-testing tool wired to conversion tracking (plugin identity not fully certain from slug alone; behavior matches an A/B testing + conversion plugin). - **Analytics/tracking:** PixelYourSite (`pixelyoursite`, `pys-facebook/v1` — Facebook Pixel/CAPI management from wp-admin). - **Promotion/engagement:** Popup Maker (`popup-maker`, `pum`) for on-site popups/lead capture. - **Performance:** Flying Press (page cache) — an ops/perf admin concern, not listing-specific. - **SEO:** Yoast (`yoast/v1`), sitemap generated by Yoast SEO. - **Security:** Wordfence (`wordfence/v1`). - **Multilingual capability (inferred):** `otgs/installer/v1` namespace is the OnTheGoSystems (WPML) installer REST endpoint — its presence suggests WPML/OTGS tooling is installed (at least the installer), though no `wpml/v1`-style translation-management namespace was observed, so **active bilingual content management is not confirmed**. - **Billing/Verification:** not observed — no WooCommerce, no membership/subscription plugin, no listing-verification workflow fingerprinted. ### Property Source PH (wp-admin, no page-builder) - **Listing management:** Two content models coexist. (1) `for_sale` / `for_lease` custom post types (confirmed via `cptui/v1` REST namespace, i.e., built with **Custom Post Type UI**, not Toolset) power the bulk of inventory — the sitemap shows **9 paginated `for_sale-sitemap*.xml` files and 3 `for_lease-sitemap*.xml` files** (RankMath paginates at up to ~1,000–5,000 URLs/file), implying several thousand live listings. Neither `for_sale` nor `for_lease` is REST-exposed. (2) A separate `property` post type **is** REST-exposed (`/wp/v2/property`, taxonomy: `category`) — a smaller/different content type, purpose not confirmed (possibly a newer or supplementary listing type; the coexistence of three listing-shaped post types is worth flagging as **CMS content-model fragmentation** on their side, a concrete anti-pattern to avoid). - **New developments:** dedicated `new_development` CPT with its own taxonomy `new_development_category` — pre-selling/developer-project content modeled separately from resale/rental listings. - **Media/marketing content types:** `galleries`, `video` (with `videos_categories` taxonomy), `testimonial`, `ig_es_campaign` (Icegram Email Subscribers campaign objects — i.e., **email newsletter campaigns are managed as wp-admin content**, not a separate ESP dashboard). - **Lead management:** Contact Form 7 (`contact-form-7/v1`, `wpcf7r/v1` redirect add-on) feeding **HubSpot CRM** via the `leadin/v1` namespace (HubSpot's official WP plugin internal name is "Leadin"). This is a genuine **CRM handoff pattern**: WP captures the lead, HubSpot owns the pipeline — the WP admin itself does not appear to have its own lead-management UI beyond CF7 entries. - **Reviews/social proof:** Trustindex (`trustindex/v1`), Strong Testimonials (`strong-testimonials/v1`), Google Reviews widget, Instagram Feed. - **Newsletter:** Icegram Express + Mailchimp for WP (`mc4wp/v1`) — two email tools present simultaneously (possible redundancy/migration-in-progress). - **SEO:** Rank Math, including its `ai-visibility` submodule (`rankmath/v1/ai-visibility` — an AI-search-visibility feature, notable as a recent SEO-tooling trend), plus AMP plugin and schema markup (`saswp-output` = Schema & Structured Data for WP). - **Security:** Wordfence, plus wp-login.php hidden (302 → `/404`). - **E-commerce (dormant):** WooCommerce is installed (string present in homepage source, `/my-account/`/`/cart/`/`/checkout/` routes exist) but de-indexed via robots.txt and not part of the visible product — likely legacy or reserved for a future paid-add-on/lead-gen-gate flow. **Confirms the brief's premise**; no purpose observed beyond "present but inactive to the public." - **Unidentified namespace:** an `mcp` REST namespace was observed on Property Source PH; its purpose is **not identified** from public signals (unlikely to be "Model Context Protocol" — more likely an unrelated plugin's short slug) — flagged for completeness, not investigated further per the read-only mandate. - **Billing/Verification:** not observed. ### Thribee (LIFULL Connect advertiser console) - **Feed upload/format:** Advertisers host a UTF-8 XML feed at a URL they control (example given: `http://www.yourdomain.com/wp_feed.xml`) and email the link to `thribee.salesinfo@lifullconnect.com` for onboarding — **there is no self-service feed-upload UI**; ingestion is a pull-based crawl of the advertiser-hosted URL, set up once via sales/support. An alternative **Crawler** mode exists for advertisers without the technical resources to build an XML feed, explicitly described by Thribee as lower-quality/lower-freshness than the XML route. - **Bid/budget management:** Auction-based **CPC model** — "you will only pay when someone clicks," not per impression. CPC is described as directly deciding (a) eligibility for exclusive **Premium Positions** (top/bottom of search results across desktop, mobile web, apps, and email alerts) and (b) **organic ranking among duplicate listings** — when the same property is listed by multiple advertisers/portals, the one with the higher CPC wins visibility; lower-CPC duplicates are suppressed entirely. Budget and CPC are managed as separate levers (a competitive CPC with insufficient budget still underspends). - **Campaign objectives (3 selectable modes, can differ per listing subset within one account):** 1. **Lead Generation** — user stays on the aggregator (Trovit/Mitula/etc.) detail page and submits a lead there; advertiser is billed per click-in to that page, not per lead. Leads (name + phone, optionally email + message) are delivered either via a **real-time webhook** (configured at `cod.webhooks`) or an **on-demand "Export Leads"** button in the dashboard (up to a 2-hour indexing delay). Homes-vertical only. 2. **Maximize Conversions** — user is redirected to the advertiser's own site; requires installing Thribee's **Conversion Tracker pixel** on that site so Thribee's ML can optimize delivery toward converting traffic. Gated ("please reach out to your Country Manager"). 3. **Clicks** — pure traffic-maximization, redirect-and-bill-per-click, no conversion optimization. - **Analytics/reporting:** Real-time dashboard stats **per campaign or per platform** (Trovit vs Mitula vs Nestoria vs Nuroa): clicks delivered, budget spent, number of conversions, conversion rate, delivered CPL (cost per lead). An **Insights dashboard** additionally surfaces duplicate-content conflicts ("unblock duplicated content you have with your competitors") and audience-targeting opportunities. A separate **Metrics API** is referenced (linked as "Metrics API Documentation" from multiple help articles) implying programmatic (non-dashboard) access to campaign metrics — **content of that API not fetched/observed**, only its existence. - **Conversion tracking:** Webhook payload is documented and JSON-shaped: ```json { "version": "1.0.0", "lead": { "datetime": "2023-07-21T11:29:12.697Z", "name": "Test Webhook", "email": "testwebhook@email.com", "phone": "(555) 555-5555", "enquiry": "This is an enquiry generated to test the webhook" }, "property": { "id": "19710" }, "campaign": { "id": "7145" } } ``` (`datetime` is ISO 8601.) This is the exact shape a `property-portal` inbound-lead endpoint would need to accept if it ever consumed Thribee-sourced leads. - **Billing:** Per-brand invoicing (Trovit and Mitula invoiced separately even under one advertiser relationship), delivered within the first 5 business days of the following month. - **Team/brokerage management, verification/moderation, white-label CRM:** **not observed** — no evidence in public docs of multi-seat team management, listing moderation/verification workflow, or a white-label CRM product bundled with Thribee. --- ## 5. Implementation & tech - **Presello:** WordPress 6.9.4 (generator meta), Elementor 4.0.7 + Elementor Pro (`elementor-pro/v1`, `elementor-ai/v1` — Elementor's built-in AI features namespace is present), Toolset suite (Types/Views/Blocks/Forms — legacy plugin slug `wp-views`), Profile Builder (front-end accounts), Yoast SEO, Wordfence, PixelYourSite, Popup Maker, Flying Press (cache), Social Warfare (share buttons), WhatsApp click-to-chat + a custom `whatsapp-accounts`/`wpa-helper` REST-exposed content type, WPForms, a `bt-bb-ab` A/B-testing tool, and an OTGS/WPML installer namespace (multilingual tooling present, active use not confirmed). Server stack: nginx + Plesk (`x-powered-by: PleskLin`), edge caching headers (`x-nginx-cache`, `cdn-cache-control`). - **Property Source PH:** WordPress 7.0.1 (generator meta at time of observation — newer than the brief's earlier-recorded 6.9.4, i.e., the site was updated between studies), theme = OceanWP parent + `iproperty` child theme, `ocean-extra` companion plugin, Custom Post Type UI (not Toolset) for `for_sale`/`for_lease`, Rank Math SEO (incl. AI-visibility module), Contact Form 7 + redirect add-on, HubSpot (Leadin plugin), Icegram Express + Mailchimp for WP, Strong Testimonials, Trustindex, Instagram Feed, Google Reviews widget, AMP plugin, Schema & Structured Data plugin, Wordfence, and a dormant WooCommerce install. Login hardened (default `/wp-login.php` returns 404). - **Thribee/LIFULL Connect:** Not WordPress — a proprietary **single-page application** (`index.php/cod.*` routing pattern, i.e., a PHP backend with client-side JS front end; bundle hashes visible: `common.35882dd1…js`, `thribee.bb147063…js`, `homepage.687d4608…js`; Sentry error monitoring wired in with release tag `thribee@c061a4a1`). Feed ingestion is **pull-based HTTP fetch of an advertiser-hosted static XML file** (or, as fallback, an HTML crawler) — no advertiser-side API/SDK is required, only a stable URL. Real-time lead delivery uses outbound **webhooks** (JSON POST) as the "push" counterpart, plus a documented but unfetched Metrics API for programmatic reporting pull. --- ## 6. Listing-feed spec (Thribee/LIFULL Connect Homes vertical, incl. Philippines specifics) Source: `help.thribee.com` articles **"Philippines - Homes Feed"** and **"Technical specifications for Homes"** (both public, no login required). **Submission mechanism:** advertiser hosts a UTF-8 XML file at a stable public URL, emails the link to `salesinfo@lifullconnect.com`; Thribee then periodically re-fetches it (no documented push/API upload path for the feed itself — only leads flow back out via webhook/API). **XML shape:** one root `<trovit>` element containing one or more `<ad>` elements, all text values wrapped in `<![CDATA[...]]>`. **Required fields** (Philippines Homes feed): `id` (unique, numeric or alphanumeric), `url`, `title` (must not contain the site's own name/URL), `type` (**Philippines only accepts `"For Rent"` or `"For Sale"`** — the global schema has a much larger enum: Roommate, Parking For Rent/Sale, Office For Rent/Sale, Land For Sale, Local For Sale/Rent/Transfer, Country House Rentals, Warehouse For Rent/Sale, Overseas, Short Term Rentals, Unlisted Foreclosure), `content` (description, minimum 30 characters), and effectively `price` (integer/decimal; supports a `period` attribute — `monthly` default, `weekly`/`daily` alternatives — and a `currency` attribute using ISO-4217 codes, auto-converted to PHP if not already PHP). **Optional fields** (all improve search-ranking quality per Thribee's own guidance): `mobile_url`, `property_type` (apartment/house/villa/bungalow/condo/etc.), `floor_area` (sq ft, integer, 20–50,000), `plot_area` (integer, with `unit="feet"`/`"acres"` attribute), `rooms` (bedrooms; "Room string" format — integer, half-decimal like `1.5`, or a range like `1-2`), `bathrooms` (same format), `parking` (boolean 0/1), `address`, `city`, `city_area`/`neighborhood`, `postcode`, `region`, `agency`, `latitude` (-90..90), `longitude` (-180..180), `orientation` (N/S/E/W), `is_furnished`, `is_new`, `condition` (free text, e.g. "remodeled"), `year` (built, ≥1700), `eco_score` (free text), `by_owner` (boolean — omit if agency-marketed), `is_rent_to_own`, `date` / `expiration_date` (multiple accepted date formats), `virtual_tour` (URL), `mls_database`, `foreclosure` / `foreclosure_type` (For-Sale variants only), and a `<pictures>` block of one-or-more `<picture>` elements, each with `picture_url`, optional `picture_title`, and an optional `featured="true"` attribute marking the primary image (the **first picture in the feed is what displays on the aggregator**, and Thribee explicitly forbids "no image available" placeholder graphics — they may suppress ads that use one). Images: minimum 186×186px, max 1MB, and **pictures are only ingested once** — the system does not re-pull updated images for an existing ad ID. This is a mature, PH-market-validated schema `property-portal` could emit directly if we ever wanted inbound traffic from Trovit/Mitula-class aggregators — our own domain model (`lib/` canonical types per `03228c22`) would need an export mapper, not a redesign, since the field set (price, bedrooms/bathrooms, floor area, location hierarchy, coordinates, pictures) is a near-1:1 match to standard PH listing data. --- ## 7. Takeaways for property-portal's future admin/CMS 1. **A headless, custom-built admin fits us better than a WordPress/Toolset-style CMS.** Both WP sites show the classic cost of that path: Presello leans on ~10+ third-party plugins just to get WhatsApp routing, popups, A/B testing, and pixel management working together inside wp-admin, and Property Source PH has visibly **fragmented its own content model** (`property`, `for_sale`, `for_lease` all coexisting as separate, only-partially-REST-exposed post types, likely from an incremental plugin migration). We already have canonical domain types (`lib/`) and a Zustand store from phases 1–2 — a purpose-built admin against that same schema avoids both the plugin-sprawl failure mode and the content-model drift we're observing in the wild. 2. **Steal the "front-end submission, not wp-admin" pattern.** Toolset Forms' whole value proposition — letting non-technical agents create/edit listings from a normal front-end page instead of the wp-admin backend — is exactly the UX shape our future CMS should target regardless of stack: a dedicated `/admin` or `/agent` app built on our existing Next.js app, not a bolted-on backend. 3. **Model WhatsApp/lead-channel routing as first-class admin content, like Presello does.** Their `whatsapp-accounts` custom type (multiple numbers, presumably routed by agent/listing) is a concrete, PH-market-appropriate pattern worth copying conceptually for our own contact-channel management, rather than hardcoding a single contact number. 4. **Decide the CRM boundary now, following Property Source PH's HubSpot handoff model.** Their WP admin does not try to own the lead pipeline — CF7 captures, HubSpot manages. We should make the same call explicitly: either build minimal in-house lead tracking (status, notes, assignment) or integrate an external CRM early, rather than half-building both. 5. **We should design our data model to be feed-exportable, but not commit to actually emitting a Thribee/aggregator feed yet.** The Thribee/LIFULL Connect XML schema (Section 6) maps cleanly onto our existing canonical listing fields, and account access is sales-gated (no self-serve — requires emailing `thribee.salesinfo@lifullconnect.com` once we have live inventory and traffic ambitions). Recommendation: keep an XML/JSON export endpoint architecturally cheap to add later (i.e., don't couple our schema to UI-only concerns), but treat actually onboarding to Trovit/Mitula as a business decision for when we have real listing volume, not a phase-2/3 engineering task. 6. **If we ever add paid-lead functionality, adopt Thribee's lead-webhook JSON shape as prior art.** Its `{version, lead:{datetime,name,email,phone,enquiry}, property:{id}, campaign:{id}}` shape is a reasonable, already-market-tested contract for any future "inbound lead from an external channel" webhook we build, aggregator-sourced or not. --- ## Admin matrix row | Key | Presello | Property Source PH | Aggregators (Thribee) | |---|---|---|---| | **Roles** | wp-admin staff roles (inferred standard WP); separate Profile Builder front-end role for site visitors (My List favorites; possibly agents via Toolset Forms) — granular role list not observed | wp-admin staff roles only (inferred); no front-end account system fingerprinted | Single advertiser/organization account, sales-provisioned; no multi-seat/team roles observed | | **Admin entry points** | `/wp-login.php` (200, open), `/wp-admin/` (302), `/login/` (Profile Builder front-end login, 200) | `/wp-login.php` (302→404, hidden), `/wp-admin/` (302) | `thribee.com/index.php/cod.login`; homepage titled "Partners Admin - Thribee" | | **Listing mgmt (bulk/feed?)** | Toolset `property` CPT (not REST-exposed) + taxonomies (REST-exposed); front-end forms capability present (Toolset Forms plugin confirmed) but no bulk/feed import observed | `for_sale`/`for_lease` CPTs via CPT UI (thousands of listings per sitemap volume) + separate REST-exposed `property` CPT — fragmented model; no bulk/feed import observed | **Feed-based**: advertiser-hosted XML pulled by Thribee (Section 6); no on-site listing authoring — Thribee only ever consumes | | **Lead CRM** | WPForms + WhatsApp click-to-chat/account routing; no CRM integration observed | Contact Form 7 → **HubSpot** (`leadin` plugin) | Leads (Lead Generation campaigns) via real-time webhook or on-demand CSV-style export; JSON schema documented (Section 4) | | **Analytics** | PixelYourSite (Facebook Pixel/CAPI), A/B testing (`bt-bb-ab`) | Rank Math (incl. AI-visibility SEO module) | Real-time per-campaign/per-platform dashboard: clicks, spend, conversions, conversion rate, CPL; separate Metrics API referenced (not fetched) | | **Promotion/boost admin** | Popup Maker for on-site popups; no paid-boost/featured-listing admin observed | Not observed | **Core product**: CPC-based Premium Positions + organic-rank boosting via bid (Section 4) | | **Billing/credits** | Not observed (no WooCommerce/membership plugin) | WooCommerce installed but dormant/de-indexed (`/my-account/`, `/cart/`, `/checkout/` blocked in robots.txt) | Per-brand monthly invoicing (e.g., separate Trovit/Mitula invoices), issued within first 5 business days of following month | | **Team/brokerage mgmt** | Not observed | Not observed | Not observed (no multi-seat/team features in public docs) | | **Developer/project mgmt** | Not observed as distinct from `property` CPT | Dedicated `new_development` CPT + `new_development_category` taxonomy — pre-selling/developer projects modeled separately from resale/rental | N/A | | **Verification/moderation** | Not observed | Not observed | Not observed (Thribee does police image quality — rejects placeholder/no-image ads — but no listing-content moderation workflow documented) | | **White-label CRM product** | Not observed | Not observed | Not observed | | **Tech/implementation** | WordPress 6.9.4 + Elementor Pro 4.0.7 + Toolset (Types/Views/Forms) + Profile Builder + Yoast + Wordfence + PixelYourSite; nginx/Plesk | WordPress 7.0.1 + OceanWP/`iproperty` child theme + CPT UI + Rank Math + CF7 + HubSpot + dormant WooCommerce; Wordfence, hardened login | Proprietary PHP + JS SPA (`index.php/cod.*` routes), Sentry-monitored; pull-based XML/crawler feed ingestion, webhook + Metrics API for egress | | **Standout admin capability** | First-class **WhatsApp account/routing management** as REST-exposed content (`whatsapp-accounts`, `wpa-helper`) — messaging-channel admin baked into the CMS | Clean **CMS→CRM handoff** (CF7→HubSpot) keeping wp-admin out of the lead-pipeline business; **AI-visibility SEO** module (Rank Math) | **Auction-based visibility**: CPC simultaneously buys premium placement *and* wins organic ranking against duplicate listings from competing portals — a monetization mechanic with no analog in either WP site |