{"id":372982,"date":"2026-10-06T07:46:49","date_gmt":"2026-10-06T07:46:49","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/terrasuite\/"},"modified":"2026-10-06T07:46:22","modified_gmt":"2026-10-06T07:46:22","slug":"terrasuite","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/terrasuite\/","author":12911309,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.2","stable_tag":"1.0.2","tested":"7.1.2","requires":"6.5","requires_php":"8.2","requires_plugins":null,"header_name":"TerraSuite","header_author":"Havenswift Hosting","header_description":"A complete estate agency suite for WordPress: property listings, shared agency instructions with fee splits, portal feed imports with de-duplication, map and radius search, applicant matching, a viewings calendar clients can request slots from, a knowledgebase, Elasticsearch and an optional AI assistant.","assets_banners_color":"382626","last_updated":"2026-10-06 07:46:22","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/terrasuite.uk\/","header_author_uri":"https:\/\/havenswift-hosting.co.uk\/","rating":0,"author_block_rating":0,"active_installs":0,"downloads":73,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.2":{"tag":"1.0.2","author":"havenswift-hosting","date":"2026-10-06 07:46:22","revision":3730240}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3730239,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3730239,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3730239,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3730239,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.2"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3730239,"resolution":"1","location":"assets","locale":"","width":1280,"height":800},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3730239,"resolution":"2","location":"assets","locale":"","width":1280,"height":800},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3730239,"resolution":"3","location":"assets","locale":"","width":1280,"height":800},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3730239,"resolution":"4","location":"assets","locale":"","width":1280,"height":800},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3730239,"resolution":"5","location":"assets","locale":"","width":1280,"height":800},"screenshot-6.png":{"filename":"screenshot-6.png","revision":3730239,"resolution":"6","location":"assets","locale":"","width":1280,"height":800},"screenshot-7.png":{"filename":"screenshot-7.png","revision":3730239,"resolution":"7","location":"assets","locale":"","width":1280,"height":800}},"screenshots":{"1":"The front page a visitor lands on: search, map search and area guides.","2":"A property, with its gallery, key facts and the enquiry form.","3":"Search results, filtered without a full page reload.","4":"The self-hosted map search - no third-party script, no API key.","5":"The dashboard an agency actually opens every morning: what needs a reply,\nwhat's coming up, and the newest clients.","6":"The property list, with everything a portal asks for.","7":"The Clients screen: one record per person, however they arrived."}},"plugin_section":[],"plugin_tags":[51424,284647,5070,58386,2199],"plugin_category":[],"plugin_contributors":[284648],"plugin_business_model":[],"class_list":["post-372982","plugin","type-plugin","status-publish","hentry","plugin_tags-estate-agent","plugin_tags-letting-agent","plugin_tags-property","plugin_tags-property-search","plugin_tags-real-estate","plugin_contributors-havenswift-hosting","plugin_committers-havenswift-hosting"],"banners":{"banner":"https:\/\/ps.w.org\/terrasuite\/assets\/banner-772x250.png?rev=3730239","banner_2x":"https:\/\/ps.w.org\/terrasuite\/assets\/banner-1544x500.png?rev=3730239","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/terrasuite\/assets\/icon-128x128.png?rev=3730239","icon_2x":"https:\/\/ps.w.org\/terrasuite\/assets\/icon-256x256.png?rev=3730239","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/terrasuite\/assets\/screenshot-1.png?rev=3730239","caption":"The front page a visitor lands on: search, map search and area guides."},{"src":"https:\/\/ps.w.org\/terrasuite\/assets\/screenshot-2.png?rev=3730239","caption":"A property, with its gallery, key facts and the enquiry form."},{"src":"https:\/\/ps.w.org\/terrasuite\/assets\/screenshot-3.png?rev=3730239","caption":"Search results, filtered without a full page reload."},{"src":"https:\/\/ps.w.org\/terrasuite\/assets\/screenshot-4.png?rev=3730239","caption":"The self-hosted map search - no third-party script, no API key."},{"src":"https:\/\/ps.w.org\/terrasuite\/assets\/screenshot-5.png?rev=3730239","caption":"The dashboard an agency actually opens every morning: what needs a reply,\nwhat's coming up, and the newest clients."},{"src":"https:\/\/ps.w.org\/terrasuite\/assets\/screenshot-6.png?rev=3730239","caption":"The property list, with everything a portal asks for."},{"src":"https:\/\/ps.w.org\/terrasuite\/assets\/screenshot-7.png?rev=3730239","caption":"The Clients screen: one record per person, however they arrived."}],"raw_content":"<!--section=description-->\n<p>Built for agencies that want their website to do the work of a person rather\nthan be a brochure. It runs anywhere in the world: the fields that appear on a\nproperty follow the market you set, so a UK agency sees tenure and council tax\nband, a Spanish agency sees community fees and the cadastral reference, and an\nAmerican agency sees HOA fees and an MLS number.<\/p>\n\n<p>Everything described below is in this plugin and works without paying anybody.<\/p>\n\n<h4>What it does<\/h4>\n\n<ul>\n<li><strong>Listings.<\/strong> Unlimited properties, for sale, to rent or short let, with\nphotographs, floorplans, key selling points and every field a portal asks for.<\/li>\n<li><strong>Search.<\/strong> Filters that run against a flat index, so ten filters is still one\nquery. Distance from a point, or an area the visitor draws on the map.<\/li>\n<li><strong>Maps.<\/strong> Self-hosted. No third-party script and no API key. An owner who does\nnot want the exact position published gets a shaded circle, and the search\nstill works correctly.<\/li>\n<li><strong>Enquiries and clients.<\/strong> One record per person, however they arrived.<\/li>\n<li><strong>Shortlists.<\/strong> A visitor saves the properties they like and comes back to\nthem, with or without registering.<\/li>\n<li><strong>Area guides<\/strong>, written by hand.<\/li>\n<li><strong>CSV import and export<\/strong>, both ways, with a mapping screen.<\/li>\n<li><strong>Structured data<\/strong> for search engines, on every property.<\/li>\n<li><strong>Privacy tools<\/strong>: the export and erase requests WordPress asks plugins to\nanswer, covering the records this plugin keeps.<\/li>\n<li><strong>Your own website<\/strong>: pages, menus, a front page and a staff list, so an\nagency can put a site together without a page builder.<\/li>\n<\/ul>\n\n<h4>What it deliberately does not do<\/h4>\n\n<p>No login lockout, no firewall, no malware scanner, no SEO fields, no caching,\nno contact-form builder. Those belong at the edge or in one plugin that does\nthem properly. Fifteen plugins each doing a fifth of the job is how a WordPress\nsite becomes slow, fragile and impossible to update.<\/p>\n\n<h4>A paid add-on exists, and is not in this plugin<\/h4>\n\n<p>TerraSuite Pro is a separate plugin sold from terrasuite.uk. It adds the\nviewings calendar and bookings, the message centre, QR codes, branded\nparticulars, portal feed importers and de-duplication, partner agencies and\nfee splits, applicant matching and alerts, Elasticsearch and the AI features.\nIt also adds the knowledgebase, with sixty-three articles written for clients\nand for staff.<\/p>\n\n<p>None of that code is in this plugin. Nothing here is switched off waiting to\nbe unlocked: what is listed above is what you get, and it does not expire.<\/p>\n\n<h3>Third-party libraries<\/h3>\n\n<p>Two libraries ship with the plugin, both unmodified release artefacts under\nGPL-compatible licences:<\/p>\n\n<ul>\n<li>Leaflet 1.9.4, BSD-2-Clause, https:\/\/github.com\/Leaflet\/Leaflet\/releases\/tag\/v1.9.4<\/li>\n<li>Leaflet.draw 1.0.4, MIT, https:\/\/github.com\/Leaflet\/Leaflet.draw\/releases\/tag\/v1.0.4<\/li>\n<\/ul>\n\n<p>Both are minified as published by their own projects. The non-compiled source is\nat the tags above, and public\/vendor\/README.md records how to replace either one.<\/p>\n\n<h3>External services<\/h3>\n\n<p>The plugin contacts nothing at all unless you switch something on, and nothing\nis contacted on activation or on a schedule.<\/p>\n\n<p><strong>Geocoding (off by default).<\/strong> When you enable it, the address of a property\nyou save is sent to the geocoding service you nominate so it can be placed on\na map. The default is Nominatim, run by the OpenStreetMap Foundation: one\nrequest per second, and every answer cached for a year.\nService: https:\/\/nominatim.openstreetmap.org\nTerms: https:\/\/operations.osmfoundation.org\/policies\/nominatim\/\nPrivacy: https:\/\/wiki.osmfoundation.org\/wiki\/Privacy_Policy<\/p>\n\n<p><strong>Map tiles.<\/strong> On a page where you place a map, the visitor's browser fetches\nmap images directly from the tile service set in Property &gt; Settings &gt; Maps,\nwhich defaults to tile.openstreetmap.org. The request comes from the visitor's\nbrowser and carries their IP address and the area of the map being viewed.\nService: https:\/\/www.openstreetmap.org\nCopyright: https:\/\/www.openstreetmap.org\/copyright\nPrivacy: https:\/\/wiki.osmfoundation.org\/wiki\/Privacy_Policy<\/p>\n\n<p><strong>Area guides and photographs (Property &gt; Get Content).<\/strong> Only when you open\nthat screen and press a button to download a region pack. The screen lists\nwhat is sent before you press anything: the address of your site, and an email\naddress only if you choose to type one in. The packs are images and text, never\ncode, and they are served by us.\nService: https:\/\/terrasuite.uk\/bundles\/\nTerms: https:\/\/terrasuite.uk\/terms-of-use\/\nPrivacy: https:\/\/terrasuite.uk\/privacy-policy\/<\/p>\n\n<p><strong>Google Places (off by default).<\/strong> If you choose to show Google reviews and\nenter your own Google API key, the place identifier you set is sent to\nplaces.googleapis.com to fetch the review text and rating shown on your site.\nService: https:\/\/developers.google.com\/maps\/documentation\/places\/web-service\nTerms: https:\/\/cloud.google.com\/maps-platform\/terms\nPrivacy: https:\/\/policies.google.com\/privacy<\/p>\n\n<p><strong>YouTube (only if you paste a YouTube address on a property).<\/strong> The video is\nembedded from www.youtube-nocookie.com, the no-cookie player, and the\nthumbnail comes from i.ytimg.com. Both are fetched by the visitor's browser\nwhen they open that property, and carry their IP address. A link to the video\non www.youtube.com is shown beside the player.\nTerms: https:\/\/www.youtube.com\/t\/terms\nPrivacy: https:\/\/policies.google.com\/privacy<\/p>\n\n<p><strong>Vimeo (only if you paste a Vimeo address on a property).<\/strong> The video is\nembedded from player.vimeo.com and a link to vimeo.com is shown beside it.\nFetched by the visitor's browser when they open that property, carrying their\nIP address.\nTerms: https:\/\/vimeo.com\/terms\nPrivacy: https:\/\/vimeo.com\/privacy<\/p>\n\n<p><strong>WhatsApp (only if a staff member has a WhatsApp number set).<\/strong> No request is\nmade: the number becomes an ordinary https:\/\/wa.me\/ link, which opens WhatsApp\nif the visitor clicks it.\nTerms: https:\/\/www.whatsapp.com\/legal\/terms-of-service\nPrivacy: https:\/\/www.whatsapp.com\/legal\/privacy-policy<\/p>\n\n<p>The plugin is published by Havenswift Hosting\n(https:\/\/www.havenswift-hosting.co.uk\/); that address appears only as a link.<\/p>\n\n<p>There is no usage tracking of any kind.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the folder to <code>\/wp-content\/plugins\/<\/code> and activate it.<\/li>\n<li>Property &gt; Settings &gt; General: your country, currency and units.<\/li>\n<li>Property &gt; Your Agency: fill in your own record.<\/li>\n<li>Add one property by hand and look at it on the website, before setting up\nany import.<\/li>\n<\/ol>\n\n<p>Property &gt; Tools will create demonstration data so you can try everything, and\nremove it again in one step.<\/p>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20it%20expire%2C%20or%20stop%20working%3F\"><h3>Does it expire, or stop working?<\/h3><\/dt>\n<dd><p>No. There is no trial, no licence check and no feature in this plugin that\nwaits for a payment. What is in the description is what it does, permanently.<\/p><\/dd>\n<dt id=\"does%20it%20need%20an%20api%20key%20for%20maps%3F\"><h3>Does it need an API key for maps?<\/h3><\/dt>\n<dd><p>No. The map library is served from the plugin. The tile URL is a setting; read\nthe terms of whichever tile service you point it at.<\/p><\/dd>\n<dt id=\"will%20it%20slow%20my%20site%20down%3F\"><h3>Will it slow my site down?<\/h3><\/dt>\n<dd><p>The search runs against a purpose-built index table rather than through post\nmeta, which is why a ten-filter search is a single query. Measured on a\nreference installation, a search took half a millisecond.<\/p><\/dd>\n<dt id=\"does%20it%20send%20anything%20anywhere%3F\"><h3>Does it send anything anywhere?<\/h3><\/dt>\n<dd><p>Not unless you switch something on, or paste in a video. See \"External\nservices\" below for everything that can reach an outside server, what each one\nsends, and when.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.2<\/h4>\n\n<ul>\n<li>The property, article, area guide, team, review and service post types, and\nthe eight taxonomies with them, are now prefixed terrasuite_ rather than ts_.\nExisting records are carried across on upgrade; no address changes.<\/li>\n<li>The printed particulars sheet loads its stylesheet the WordPress way instead\nof printing it into the page.<\/li>\n<li>Every value a form sends is sanitised where it is read: prices and sizes, the\nareas drawn on the map, the term lists, client notes, import separators and\nstored credentials.<\/li>\n<li>The valuation estimate is escaped where it is output rather than where it is\nbuilt, because a filter can change it in between.<\/li>\n<li>The knowledgebase is no longer part of the free plugin. Writing and publishing\narticles is a TerraSuite Pro feature; nothing already written is removed.<\/li>\n<li>Search results no longer repeat a property across two pages when several share\nthe same price or date.<\/li>\n<li>Spanish, and any other translation, is read from wp-content\/languages\/plugins\nas WordPress.org supplies it.<\/li>\n<\/ul>\n\n<h4>1.0.1<\/h4>\n\n<ul>\n<li>Drawing an area on the map, and shortlists, are now part of the free plugin.<\/li>\n<li>The shortlist has its page back. Properties could be saved with the heart\nbut there was nowhere to see the list again.<\/li>\n<li>Help articles can be written and published here. The screen for them was\nmissing, which left the \/help page with no way to put anything on it.<\/li>\n<li>QR codes, and the ready-written articles, moved to TerraSuite Pro.<\/li>\n<li>No page is created for a feature that is not installed.<\/li>\n<li>Opening Get Content no longer contacts us. The list of regions is fetched\nwhen you ask for it, which is what that screen always said.<\/li>\n<li>Stored passwords, and the tokens in feed addresses, use a key belonging to\nthis plugin. They were derived from the WordPress authentication salts, so\nrotating those after a security incident destroyed them with no warning.<\/li>\n<li>Feed passwords are stored with AES-256-CBC rather than a reversible scramble.<\/li>\n<li>A downloaded content pack is refused if it contains anything runnable.<\/li>\n<li>Every external service the plugin can reach is now listed above.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>First release.<\/li>\n<\/ul>","raw_excerpt":"Estate agency software: property listings, filtered and map search, an area the visitor draws, enquiries and client records.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/372982","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=372982"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/havenswift-hosting"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=372982"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=372982"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=372982"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=372982"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=372982"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=372982"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}