Import a property listing from a URL into Qobrix CRM. Use when the user says "import this listing", "add this property from bazaraki", "import from index", "add this buysellcyprus listing", "scrape this property", "import listing", pastes a URL from bazaraki.com, index.cy, or buysellcyprus.com, or wants to create a property in the CRM from an external listing.
Scrape a property listing from a URL and create it in Qobrix CRM with correct field mapping, including automatic location UUID resolution, seller/agency linking, and photo upload.
bash "${CLAUDE_PLUGIN_ROOT}/scripts/qobrix-api.sh" METHOD "/api/v2/ENDPOINT" '[BODY]'
If the script returns "error":"not_configured", tell the user to run /setup to configure their API credentials.
| Site | URL Pattern | Notes |
|---|---|---|
| Bazaraki | bazaraki.com/adv/... | Largest Cyprus classifieds |
| Index.cy | index.cy/sale/... or index.cy/rent/... |
| Real estate portal |
| BuySellCyprus | buysellcyprus.com/... | Property marketplace |
| Other | Any property listing URL | Best effort extraction |
Use WebFetch to retrieve the listing page. Extract these fields:
| Listing Field | Qobrix Field | Type | Notes |
|---|---|---|---|
| Title/Name | name | string | Required |
| Sale price | list_selling_price_amount | float | Numeric only, no currency |
| Rental price | list_rental_price_amount | float | Numeric only |
| Bedrooms | bedrooms | integer | |
| Bathrooms | bathrooms | integer | |
| Covered area | covered_area_amount | float | sqm |
| Plot area | plot_area_amount | float | sqm, for houses/land |
| For sale or rent | sale_rent | enum | See values below |
| Property type | property_type | enum code | See values below |
| City/Area | location lookup | string | Used to find location UUID |
| Area/Town | city | string | E.g. "Sotiros", "Mesa Geitonia" |
| District | state | string | E.g. "Larnaca", "Limassol" |
| Country code | country | string | ISO-2, e.g. CY |
| Street address | street | string | Full street name + number if shown |
| Postal code | post_code | string | ZIP / postcode if shown |
| Lat,Lng | coordinates | string | Format: "34.9225,33.6210" |
| Floor | floor_number | integer | |
| Year built | year_built | integer | |
| Furnished | furnished | enum | See values below |
| Description | description | string | Full text + source attribution |
| Status | status | enum | Always set to available |
| Agency/Seller | contact lookup | string | Used to find/create seller |
| Image URLs | media upload | array | Upload after property creation |
Qobrix stores location in two complementary ways — both must be populated:
location UUID — links to the Qobrix locations tree (district/area hierarchy).street, post_code, city, state, country, coordinates. These are what show on the property "Location" page. If you only set location + coordinates, Street and Post Code display as "--".bash "${CLAUDE_PLUGIN_ROOT}/scripts/qobrix-api.sh" GET "/api/v2/locations?search={district}%20{area}"
If no exact match, try: fuzzy match on area, match on district only, or ask the user.
Scrape hard for these — they are often tucked into the "Location" / "Address" section, the breadcrumb, or the embedded Google Maps block:
city (not street) and leave street null.6046, 7550). Look for them near the address, in structured data (JSON-LD), or in the map iframe URL (&q=...%206046).q=lat,lng or center=lat,lng). Format as "lat,lng" string.state=Larnaca, city=Sotiros, country=CY).If street or post_code cannot be found on the page, leave them null — don't invent values.
sale_rent| Listing text | Qobrix value |
|---|---|
| For sale / buy | for_sale |
| For rent / to let | for_rent |
| Both | for_sale_and_rent |
property_type| Listing text | Qobrix code |
|---|---|
| Apartment / Flat | apartment |
| House / Detached / Villa | house |
| Land / Plot | land |
| Office | office |
| Shop / Retail | retail |
| Commercial / Industrial | industrial |
| Investment | investment |
| Other | other |
furnished| Listing text | Qobrix value |
|---|---|
| Fully furnished | furnished |
| Semi / partly | semi_furnished |
| Optional / negotiable | optionally_furnished |
| Unfurnished / empty | unfurnished |
Before creating, show the user:
Property to import:
---
Name: 3 Bedroom Apartment in Mesa Geitonia, Limassol
Type: apartment (for_sale)
Price: EUR 375,000
Beds/Baths: 3 bed / 1 bath
Area: 99m2 covered
Floor: 1st
Built: 1997
Location: Mesa Geitonia, Limassol [matched UUID]
Street: Agias Fylaxeos 128
Post Code: 3025
Coordinates: 34.6892,33.0411
Agency: Kazo Real Estate [found in contacts]
Images: 7 photos found
Source: https://index.cy/sale/9140726-...
---
Create in Qobrix?
Wait for confirmation.
bash "${CLAUDE_PLUGIN_ROOT}/scripts/qobrix-api.sh" POST "/api/v2/properties" \
'{"name":"...","property_type":"apartment","sale_rent":"for_sale","list_selling_price_amount":375000,"bedrooms":3,"bathrooms":1,"covered_area_amount":99,"location":"{location_uuid}","street":"{street}","post_code":"{postcode}","city":"{area}","state":"{district}","country":"CY","coordinates":"{lat},{lng}","status":"available","description":"..."}'
Always include in description:
{original description text}
---
Imported from {Site Name}
Source URL: {original_url}
External reference: {ref_number_if_found}
Import date: {today}
Original agency: {agency_name_if_found}
After creating, look up the listing agency:
bash "${CLAUDE_PLUGIN_ROOT}/scripts/qobrix-api.sh" GET "/api/v2/contacts?search=first_name%20contains%20%22{agency_name}%22&limit=5"
If not found, create:
bash "${CLAUDE_PLUGIN_ROOT}/scripts/qobrix-api.sh" POST "/api/v2/contacts" '{"first_name":"{agency_name}","is_company":true}'
Then link:
bash "${CLAUDE_PLUGIN_ROOT}/scripts/qobrix-api.sh" PUT "/api/v2/properties/{id}" '{"seller":"{contact_uuid}"}'
For each image URL:
bash "${CLAUDE_PLUGIN_ROOT}/scripts/qobrix-api.sh" POST "/api/v2/properties/{id}/media" \
'{"url":"{image_url}","display_order":{N},"category":"{featured_photo|photos}"}'
First image: category="featured_photo", rest: category="photos".
If upload fails with permission error, collect all URLs and show them for manual upload.
Created in Qobrix: #{id} — {title}
Open: {crm_url}/properties/view/{id}
Seller: {agency} [linked]
Photos: 7/7 uploaded
Then offer:
If given multiple URLs, process each and show a results table at the end.