WordPress plugin intelligence profile

Flexa Local Services

Service pages, online booking and a lead form for a local business, with optional CRM, payments, reviews and analytics modules.

WP PlugIndex snapshot

Current directory snapshot

Tested up to WordPress 7.1
Current version1.1.4
WordPress coverageTested up to WordPress 7.1
Minimum stackWP 6.4 · PHP 8.1
Directory statusactive
Last directory update28 Oct 20265d ago
Active installationsNewAdoption metric — not a quality score
WordPress.org ratingNo WordPress.org ratings yet
Official packageDirect from WordPress.org

Repository metrics are context, not quality scores. Active installations measure adoption and can strongly reflect a plugin’s age and historical popularity. Ratings, recent updates and “Tested up to” metadata also do not guarantee modern code, error-free operation, security, feature completeness or suitability for a particular site. Why active installs don’t tell the whole story →

WP PlugIndex currently records Flexa Local Services version 1.1.4 as active, updated 5d ago and tested up to WordPress 7.1.

Overview

About this plugin

A plumber’s website usually ends up running three plugins: one for the contact form, one to lay out services and testimonials, one for local business schema. None of them knows about the others. So the alert that lands in the owner’s inbox says a form was submitted, and leaves out the thing they actually want to know, which job the caller is asking about.

Flexa Local Services is those three jobs in one plugin, wired together. The form knows which page it was sitting on, so every lead arrives labelled “Emergency Plumbing” or “Drain Cleaning” rather than “Contact form”. Hitting reply on the alert email goes to the customer, not to the website.

Both of those are small things that decide whether the owner keeps the plugin after week one.

Everything lives under one Flexa Local menu: the content you publish, the leads that come in, the forms that collect them, and the settings they share. When the business outgrows a contact form, the same menu has modules for online booking, customers, payments, reviews and more. They ship inside the plugin and stay off until you switch them on.

What you get on day one

  • A setup checklist on the dashboard that tracks five real steps and does not tick itself.
  • A starter site for nine trades, so one click fills an empty plugin with example content you can edit.
  • Leads listed newest first, with the page, the phone number and the email on the same row.
  • Reply and Call buttons on each lead, so the follow-up happens from a phone.
  • Email alerts that quote the visitor’s own answers under the question they were asked.
  • CSV export, with a UTF-8 marker so Excel reads accented names correctly, and spreadsheet formulas defused so an export cannot run anything on your machine.

A starter site, if you want one

An empty plugin is hard to judge. Pick a trade on the Tools screen, press Import, and you get a worked example of a whole site: home, services, pricing, service areas, recent work, reviews, about, FAQ, contact and a quote page, each one assembled from the blocks. Plumbing, electrical, HVAC, roofing and locksmith get an emergency call-out page as well, because those are the trades whose customers go looking for one at midnight.

Behind the pages sit six services with starting prices, six service areas, six testimonials, eight FAQs, three team members, three finished jobs, three offers and a quote form wired to the leads table.

Nine trades are there to pick from: plumbing, electrical, HVAC, roofing, locksmith, appliance repair, pest control, cleaning and landscaping. Everything is sample text about an invented company in Portland, written to be plausible rather than impressive, so edit the prices and the phone number before you launch. No images are bundled.

The pages arrive as drafts, so nothing shows up on your site until you publish them.

Publishing is one tick, and two more sit next to it: Home becomes the front page of the site, and a navigation menu is built from the page set and hung in the first free slot your theme offers. Both are on by default, and both need the pages published, so they sit out an import that comes in as drafts. The company name, phone, email and address are filled in from the sample data either way, but only where you have not set them yet.

Nothing you already filled in is overwritten, and a menu your theme is already showing is left where it is. On a block theme the menu is still created, ready to drop into a Navigation block.

One button on the same screen takes the whole import back out again, by ID. The front page setting and the menu location go back the way they were, anything you edited in the meantime is kept, and no lead is ever touched.

Content types

Each one is a normal WordPress post type, so the editor, revisions, featured images and search all behave the way you expect.

  • Services with a starting price, hero text, a call to action and optional JSON-LD schema
  • Service areas with city, state, ZIP codes and coordinates, so visitors can tell whether you cover them
  • Projects for finished work, with before and after images, cost, duration and the service and area they belong to
  • Testimonials with a star rating, the customer’s name, a photo and an optional video
  • Team members with a role, years of experience, phone, email and photo
  • FAQs, grouped by category and attachable to a service
  • Coupons with a code, a fixed or percentage discount and an expiry date

Blocks

Twelve blocks render your content on the front end. They are server rendered, so a published page always shows the current data, not a copy frozen at the time you saved it.

Services Grid, Areas Grid, Projects, Testimonials, Team, FAQ, Coupons, Pricing, Hero, CTA, Contact Card and Form.

Lead capture

Build a form in the Forms screen, drop the Form block (or the [flexa_local_form id="1"] shortcode) on any page, and submissions land in the Leads screen.

  • Each lead records the page it came from, which is the whole point of reusing one form across a site.
  • Works with JavaScript switched off. With JavaScript on, it submits without reloading the page.
  • A honeypot field and a timing check reject bots, so visitors never meet a CAPTCHA.
  • Email alerts to one address or several, with Reply-To set to the customer.
  • Mark a lead new, contacted, won or lost.

Modules

Eight modules come with the plugin. Each one is off on a new site, and a module that is off runs no code at all. Switch them on and off under Flexa Local > Modules; turning one off keeps its data.

  • Booking: online appointments. See below.
  • Customers (CRM): leads and bookings become customer records with a drag-and-drop pipeline from new to won or lost, tags, custom fields, tasks, an activity timeline, CSV import and export, and timed email sequences.
  • Payments: manual payments and Stripe Checkout, booking deposits, full or partial refunds, receipts, taxes, recurring billing and optional PDF invoices.
  • Reviews: a review form with up to three photos, moderation, public replies, a Reviews block with star ratings and schema.org markup, and a review request emailed after a booking.
  • Analytics: leads, form submissions and bookings per day, conversion goals, a comparison with the previous period, which campaigns and sites bring conversions (first or last touch), CSV export and a weekly email report.
  • Membership: paid or free plans with tiers, a Members Only block that can unlock content a set number of days after joining, WordPress roles per plan and member-only coupon codes. Paid plans need the Payments module.
  • AI Assistant: a chat on your site that answers visitors from your own pages, services and FAQs, plus content writing, lead scoring and suggested review replies. It uses your own Anthropic (Claude) API key.
  • Mobile API: the backend for a mobile app: token sign-in, app settings in one call, offline sync, push notification queue and app links.

Online booking

Switch on the Booking module and add the Booking Form block to a page. Visitors pick a service, a staff member or resource if you offer a choice, a date and a free time, and the booking arrives in the Bookings screen.

  • Times already taken are never offered, so a slot cannot be booked twice.
  • Business hours, plus working hours and days off for each staff member or resource.
  • A calendar popup for the date, and only the times still free on that day.
  • Confirmation and reminder emails, each with a calendar file attached.
  • Customers cancel or reschedule from the link in their email, without an account.
  • Optional repeat bookings: weekly, every two weeks or monthly.
  • Change a booking’s status, reschedule it or download its calendar file from the admin.
  • Optional deposits through the Payments module, and optional two-way sync with Google Calendar.

For developers

  • REST API under fxlc/v1 for content, forms, entries, leads and settings. Each module adds its own routes to the same namespace.
  • Hooks for the pieces you are most likely to want to change: fxlc_lead_notification, fxlc_form_spam_check, fxlc_form_public_submit, fxlc_settings_defaults, fxlc_admin_menu, fxlc_demo_packs, fxlc_demo_pages and more.
  • Leads and form submissions live in their own tables, so a large volume of them never slows down your posts list.
  • The core plugin uses no external services: lead emails go out through WordPress’s own mail function. A few modules can talk to an outside service once you configure it; see External services below.

Source code

Four files in this plugin are compiled, in two bundles:

  • The main admin app: assets/dist/assets/main-*.js and main-*.css, built

from apps/admin/src/ (TypeScript and React).

  • The Booking module’s admin screen: addons/booking/assets/dist/admin.js and

css, built from addons/booking/apps/admin/src/ (TypeScript and

React).

The readable source of both ships inside the plugin, next to the build it

produces, together with the build configuration, so nothing has to be fetched

to inspect or rebuild it.

Everything else is already readable as shipped. js and

css are hand-written, with no build step and no minified

variant, and all of the PHP is plain source under app/. The other modules

under addons/ are the same: plain PHP, JavaScript and CSS.

Both builds need Node 20 or newer and pnpm 10 ( npm install -g pnpm ).

To rebuild the main admin app, in the plugin folder:

  • pnpm install
  • pnpm build

json and then Vite against

ts, writing the bundle and its manifest back into

assets/dist/. json to find the

hashed filenames, so a rebuild needs no change in PHP. pnpm type-check and

pnpm test run the type checker and the unit tests on their own.

To rebuild the Booking admin screen, in the plugin folder:

  • cd addons/booking
  • pnpm install
  • pnpm build

json and then

js and

css into addons/booking/assets/dist/.

yaml files

that ship with the plugin (one pair in the plugin folder, one in

addons/booking/): Vite 6, TypeScript 5, React 18, Tailwind CSS 4.

External services

Your content, leads and settings stay on your site. The core plugin contacts one outside service, only in the admin, for the optional deactivation survey described first below. The other services are only contacted when you switch on the module that uses them and fill in its settings.

Nothing is sent to them before that.

Deactivation feedback (Flexa Product Intelligence)

When you go to deactivate Flexa Local Services on the Plugins screen, a short optional survey asks why. com. php, never on the front end, and never blocks deactivation: skip it, or let it fail, and the plugin still deactivates.

What is sent, and when:

  • On opening the Plugins screen: a request to /api/v1/config (product slug and tier) to load the survey’s settings. The answer is cached for 6 hours.
  • When you deactivate or use the survey: the reason you pick and any message you choose to type, sent to /api/v1/deactivations, /api/v1/events, /api/v1/feedback, /api/v1/feature-requests or /api/v1/recovery-events.

Each request carries an anonymous identifier for the site (a random UUID), the plugin version and tier, and by default your WordPress version, PHP version and locale. No email address, site domain, user identity or raw IP address is collected. To stop sending the WordPress and PHP versions and locale, add add_filter( 'fxlc_deactivation_survey_config', fn( $c ) => array( 'collect_environment' => false ) + $c );.

To switch the survey off entirely, add add_filter( 'fxlc_deactivation_survey_enabled', '__return_false' );.

com/pages/terms

com/pages/privacy

Anthropic (Claude API), AI Assistant module

Used to write content, score leads, draft review replies and answer visitors in the site chat. When one of these runs, the prompt is sent to Anthropic: for the chat that is the visitor’s question, the last few messages of the conversation and passages from your published content; for lead scoring, the lead’s form answers. Requests go from your server with your own API key, only after you enter one.

com/legal/commercial-terms

com/legal/privacy

Stripe, Payments module

Used to take card payments and recurring subscriptions (including Membership plans) through Stripe Checkout, and to receive Stripe’s payment notifications. When a visitor pays, the amount, currency, item name and the payment’s ID on your site are sent to Stripe, and the visitor enters their card details on Stripe’s own page. For a subscription, the customer’s email address is sent as well, so Stripe can send receipts and keep the subscription under one customer.

When you act on a payment from the admin, the module also asks Stripe to issue a refund, create a discount coupon, cancel or resume a subscription, or retry a failed invoice; those requests carry the Stripe IDs involved and, for a refund or coupon, the amount. Only used after you enter your Stripe keys.

com/legal/ssa

com/privacy

Google Calendar, Booking module

Optional two-way sync. Each booking is copied to your Google Calendar as an event with the service, the customer’s name and contact details and the booking time, and busy times in that calendar are read back so they cannot be booked. Only used after you connect a Google account with your own OAuth client in the Booking settings.

com/terms

com/privacy

Cloudflare Turnstile, Booking module

Optional bot check on the booking form. When switched on, the form loads Turnstile’s script from Cloudflare, and on submit the check’s token and the visitor’s IP address are sent to Cloudflare to confirm the visitor is a person. Only used after you enter Turnstile keys.

com/website-terms/

com/turnstile-privacy-policy/

Your own webhook, Booking module

If you enter a webhook URL in the Booking settings, booking events (the booking and the customer’s details) are posted to that URL, which is a service you choose and control.

WordPress.org metadata

Plugin tags

Topics listed for this plugin in the WordPress.org directory.

  • local business
  • appointments
  • booking
  • leads
  • services
Compatibility & maintenance

Compatibility & maintenance

Tested with WP 7.1

Marked as tested with the current WordPress 7.1 release.

Current WordPress releaseWordPress 7.1
WordPress.org Tested up to7.1
Minimum requirementsWordPress 6.4 · PHP 8.1
Update activity28 Oct 20265d ago

“Tested up to” is directory metadata supplied by the plugin author. WP PlugIndex does not turn an older declaration into a claim that the plugin is incompatible.

Changes recorded by WP PlugIndex

Recent tracked changes

No tracked version or compatibility changes have been recorded by WP PlugIndex yet.

Tracking & source

WP PlugIndex tracks public WordPress.org directory metadata and records selected version, compatibility and availability changes as they are detected.

Plugin watchlist

Watch this plugin

Sign in to your WP PlugIndex account or create a free account. Free accounts can watch up to 5 plugins and see what changed.

Watch limit

Watchlist limit reached

You have reached your current active watch limit.