Title: TurnKey Directories
Author: turnkeydirectories
Published: <strong>July 16, 2026</strong>
Last modified: July 16, 2026

---

Search plugins

![](https://s.w.org/plugins/geopattern-icon/turnkey-directories.svg)

# TurnKey Directories

 By [turnkeydirectories](https://profiles.wordpress.org/turnkeydirectories/)

[Download](https://downloads.wordpress.org/plugin/turnkey-directories.3.1.1.zip)

 * [Details](https://wordpress.org/plugins/turnkey-directories/#description)
 * [Reviews](https://wordpress.org/plugins/turnkey-directories/#reviews)
 *  [Installation](https://wordpress.org/plugins/turnkey-directories/#installation)
 * [Development](https://wordpress.org/plugins/turnkey-directories/#developers)

 [Support](https://wordpress.org/support/plugin/turnkey-directories/)

## Description

TurnKey Directories turns a WordPress install into a structured business directory.
The free plugin lets you create unlimited listings manually — one at a time through
a simple “Add a Listing” form — and ships with a setup wizard, a public-facing search
and listing UI, dynamic virtual directory pages, LocalBusiness and directory-level
schema, and XML + HTML sitemaps. Need to populate a directory in bulk? Bulk CSV/
XLSX import and business-data import via the Outscraper API are available in the
optional Pro add-on.

#### Core Features

 * **Setup wizard** that walks through the optional integrations (Google Search 
   Console/GA4, Mapillary), adding your first listings, and sitemap generation.
 * **Manual listing creation** — add unlimited listings one at a time through an“
   Add a Listing” form, with a full editor for photos, working hours, and contact
   details.
 * **Dynamic virtual directory pages** across niche, country, state, city, and business
   levels, generated on the fly from your listings.
 * **Faceted search + Leaflet map** with filtering, search, and pagination.
 * **Schema.org JSON-LD**: LocalBusiness and BreadcrumbList on every listing page,
   directory-level CollectionPage / ItemList schema on category (niche/country/state/
   city) pages, plus WebSite + SearchAction site-wide.
 * **XML and HTML sitemaps** so newly added listings are discoverable.
 * **Accent-color and typography customization** (Settings  Appearance) to match
   your brand.
 * **Two shortcodes** — `[turnkeydir_dynamic_directory]` renders the category overview
   anywhere; `[turnkeydir_city_directory category="" state="" city=""]` embeds a
   city listing block.
 * **Mapillary integration** to pull street-view imagery for listings with coordinates.
 * **Google Search Console + Analytics (GA4)** connection with per-page analytics.
 * **Optional “Powered by” credit** — opt-in (off by default).
 * **Performance-first architecture**: object-cache-aware caching layer, prepared
   statements throughout, encrypted secrets at rest, rate-limited customer-facing
   AJAX endpoints.

#### Upgrade to Pro

[TurnKey Directories Pro](https://turnkeydirectories.com/) adds bulk CSV/XLSX import,
business-data import via the Outscraper API, business-owner claims and a customer
portal, on-site reviews, multi-engine indexing (Google Indexing API + IndexNow),
keyword-rank tracking, Stripe subscription billing, display ad zones, and the cross-
site directory link network (Network Hub). The free plugin runs fully on its own;
Pro is an optional add-on.

#### External services

This plugin can talk to a number of third-party services. No service is contacted
on its own: the Mapillary and Google integrations are opt-in via the setup wizard
or the relevant settings tab, and the admin-side Nominatim geocoding runs only when
you save an address in the listing editor. On the visitor side, directory pages 
load OpenStreetMap map tiles (the maps are a core feature of the directory pages),
and a listing page embeds a video or street-view frame only when that listing has
one.

 * **OpenStreetMap tile server** (`tile.openstreetmap.org`) — whenever a directory
   page renders its Leaflet map (and likewise for the map preview in the wp-admin
   listing editor), the browser requests the map-tile images for the viewed area
   directly from OpenStreetMap. As with any image request, the viewer’s IP address
   and user agent reach the tile server, along with the tile coordinates of the 
   map area being viewed. Operated by the OpenStreetMap Foundation. [Tile usage policy](https://operations.osmfoundation.org/policies/tiles/)·
   [Privacy policy](https://osmfoundation.org/wiki/Privacy_Policy).
 * **OpenStreetMap Nominatim** (`nominatim.openstreetmap.org`) — geocoding lookups(
   forward and reverse). Used in two places: (1) the admin listing editor sends 
   the address text or coordinates you enter; (2) on the public directory search,
   when a visitor chooses to use their current location, their browser sends those
   coordinates to resolve them to a place name (user-initiated; the browser also
   asks for geolocation permission first). [Usage policy](https://operations.osmfoundation.org/policies/nominatim/)·
   [Privacy policy](https://osmfoundation.org/wiki/Privacy_Policy).
 * **Mapillary / Meta** (`graph.mapillary.com`) — opt-in; when a Mapillary client
   token is configured, the plugin sends each listing’s latitude/longitude (plus
   your token) to request street-view imagery for that listing. The returned images
   are then loaded by visitors’ browsers from Mapillary’s image CDN (`tiles.mapillary.
   com`, `scontent.xx.fbcdn.net`), and where a listing shows an interactive street-
   view embed the visitor’s browser loads Mapillary’s embed viewer from `www.mapillary.
   com` (the visitor’s IP address and user agent reach Meta’s servers). [Terms of use](https://www.mapillary.com/terms)·
   [Privacy policy](https://www.mapillary.com/privacy).
 * **Google** — opt-in: when you connect Google integration, the admin requests 
   Google Search Console and Analytics (GA4) reporting on your behalf, sending your
   OAuth tokens and your site URL (`accounts.google.com`, `oauth2.googleapis.com`,`
   googleapis.com`). This connection is used only to read your own reporting data
   into the admin Analytics dashboard; the plugin does not add any Google tracking
   tag to your public pages. [Terms of service](https://policies.google.com/terms)·
   [Privacy policy](https://policies.google.com/privacy).
 * **YouTube / Vimeo video embeds** — when a listing has a video URL on record, 
   its listing page embeds that video player in the visitor’s browser (`youtube.
   com` / `player.vimeo.com`); the embed provider receives the visitor’s IP address
   and user agent, as with any embedded player. No video services are contacted 
   on pages without a listing video. [YouTube terms](https://www.youtube.com/t/terms)·
   [Google privacy](https://policies.google.com/privacy) · [Vimeo terms](https://vimeo.com/terms)·
   [Vimeo privacy](https://vimeo.com/privacy).
 * **Directions links** — the “Get Directions” buttons are plain user-initiated 
   links that open the visitor’s maps application (Google Maps or the platform’s
   geo: handler); nothing is contacted until the visitor taps them.
 * **Share links** — the share buttons on directory pages are likewise plain user-
   initiated links to the visitor’s chosen network (Facebook, X/Twitter, LinkedIn,
   or an email draft); nothing is contacted until the visitor taps one, at which
   point the shared page URL and title travel to that network as part of the link.

#### Bundled third-party libraries

All front-end libraries are bundled locally — the plugin loads none of its own assets
from any CDN. (The only external scripts are the per-listing video/street-view embeds—
see the external-services list above.) Bundled (with links to their readable source):
[Leaflet 1.9.4](https://github.com/Leaflet/Leaflet) (BSD-2), [Chart.js 4.5.1](https://github.com/chartjs/Chart.js)(
MIT), [Font Awesome Free 6.7.2](https://github.com/FortAwesome/Font-Awesome) (icons
CC BY 4.0, code MIT, fonts OFL), [jsVectorMap 1.7.0](https://github.com/themustafaomar/jsvectormap)(
MIT), and the [Inter](https://github.com/rsms/inter) typeface (OFL). Each library’s
full license text ships alongside it under `public/vendor/`.

#### Source Code & Bug Reports

Source code, issue tracker, and contribution guidelines are available at [turnkeydirectories.com](https://turnkeydirectories.com/).

### Recommended hosting setup

The plugin schedules daily background tasks for Google Analytics / Search Console
sync and Mapillary image fetching. By default WordPress’s `wp_cron` piggybacks on
regular page loads — meaning a logged-in admin viewing a public page can be the 
one that synchronously runs an overdue background task. If a Google API call is 
slow that day, that page load is slow too.

For best front-end performance, offload `wp_cron` to a real server cron:

 1. In `wp-config.php`, above the “stop editing” comment, add:
 2. define(‘DISABLE_WP_CRON’, true);
 3. In your hosting control panel’s cron-job manager (Hostinger hPanel  Advanced  Cron
    Jobs, or cPanel  Cron Jobs), add an every-five-minute job that hits `wp-cron.php`:
 4. */5 * * * * curl -s https://YOUR-DOMAIN.com/wp-cron.php?doing_wp_cron >/dev/null
    2>&1
 5. (replace `YOUR-DOMAIN.com` with your actual site)

After this, all background tasks run in their own short-lived process and never 
block a visitor’s page render.

As a defense-in-depth, each scheduled callback also has a `DOING_CRON` guard and
an in-flight transient lock so even with default `wp_cron` enabled, a slow Google
API call can’t be re-entered by a concurrent page load and is bounded by a short
HTTP timeout. With both the server-cron offload and the in-plugin guards in place,
the impact of any third-party API outage on your front-end response time is effectively
zero.

## Blocks

This plugin provides 1 block.

 *   Directory Listings

## Installation

 1. Upload the `turnkey-directories` folder to `/wp-content/plugins/`, or install the
    plugin through the WordPress Plugins screen.
 2. Activate the plugin through the **Plugins** screen in WordPress.
 3. Visit **TurnKey Directories** in the admin sidebar to launch the setup wizard.
 4. Follow the wizard to connect the optional integrations (Google, Mapillary), add
    your first listings, and generate the sitemap. Branding (accent color, typography)
    lives under **Settings  Appearance**.

## FAQ

### Does this plugin work without any third-party services?

Yes. The core directory (manual listing creation, public pages, schema, sitemap)
works without any external integrations. Mapillary and Google are opt-in.

### How many listings can the plugin handle?

Architecturally targeted at large directories on standard shared hosting. Performance
scales with your DB, hosting tier, and whether you have an external object cache(
Redis or Memcached) configured. The dynamic-routing layer caches city/state/country
queries through `wp_cache_*` (with a transient fallback) so high-traffic pages do
not hammer MySQL. The free plugin supports an unlimited number of manually created
listings; to populate a directory in bulk, the Pro add-on adds CSV/XLSX import and
business-data import via the Outscraper API.

### Are stored API keys encrypted?

Yes. All third-party credentials (Mapillary, Google OAuth refresh/access tokens)
are encrypted at rest using `sodium_crypto_secretbox` (XSalsa20-Poly1305) with a
key derived from `wp_salt('auth')`. Existing plaintext options are migrated transparently
on first read.

### What visitor data does the plugin store?

The directory stores the business listings you create. For abuse prevention, the
built-in security log records the IP address, user agent and request path of requests
that trip a rate limit or look malicious, keeping only a rolling window of the most
recent entries so repeat offenders can be blocked. No cookies are set on visitors,
and the plugin adds no analytics or tracking tag to your public pages. You can clear
the security log at any time from **Dashboard  Health  Security Logs**.

### How do I delete all plugin data on uninstall?

Visit **Settings  Danger Zone  Delete all plugin data on uninstall** and check the
box BEFORE deleting the plugin from the Plugins page. The default behavior preserves
your data so you can reinstall without loss.

## Reviews

There are no reviews for this plugin.

## Contributors & Developers

“TurnKey Directories” is open source software. The following people have contributed
to this plugin.

Contributors

 *   [ turnkeydirectories ](https://profiles.wordpress.org/turnkeydirectories/)

[Translate “TurnKey Directories” into your language.](https://translate.wordpress.org/projects/wp-plugins/turnkey-directories)

### Interested in development?

[Browse the code](https://plugins.trac.wordpress.org/browser/turnkey-directories/),
check out the [SVN repository](https://plugins.svn.wordpress.org/turnkey-directories/),
or subscribe to the [development log](https://plugins.trac.wordpress.org/log/turnkey-directories/)
by [RSS](https://plugins.trac.wordpress.org/log/turnkey-directories/?limit=100&mode=stop_on_copy&format=rss).

## Changelog

#### 3.1.1

 * Initial release.

## Meta

 *  Version **3.1.1**
 *  Last updated **10 hours ago**
 *  Active installations **Fewer than 10**
 *  WordPress version ** 5.9 or higher **
 *  Tested up to **7.0.1**
 *  PHP version ** 7.4 or higher **
 * Tags
 * [business directory](https://wordpress.org/plugins/tags/business-directory/)[directory](https://wordpress.org/plugins/tags/directory/)
   [listings](https://wordpress.org/plugins/tags/listings/)[local seo](https://wordpress.org/plugins/tags/local-seo/)
   [schema markup](https://wordpress.org/plugins/tags/schema-markup/)
 *  [Advanced View](https://wordpress.org/plugins/turnkey-directories/advanced/)

## Ratings

No reviews have been submitted yet.

[Your review](https://wordpress.org/support/plugin/turnkey-directories/reviews/#new-post)

[See all reviews](https://wordpress.org/support/plugin/turnkey-directories/reviews/)

## Contributors

 *   [ turnkeydirectories ](https://profiles.wordpress.org/turnkeydirectories/)

## Support

Got something to say? Need help?

 [View support forum](https://wordpress.org/support/plugin/turnkey-directories/)