=== Local Lift SEO ===
Contributors: mongaya12
Tags: local seo, seo title, meta description, google business profile, schema
Requires at least: 6.4
Tested up to: 7.0
Requires PHP: 8.0
Stable tag: 1.2.3
License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html

Local SEO for WordPress: LocalBusiness schema, GBP, NAP checker, local SEO score, on-page SEO, import, blocks, hours, and KML.

== Description ==

**Local Lift SEO** is an all-in-one **local SEO plugin** for WordPress — built for storefronts, service-area businesses, contractors, restaurants, clinics, and agencies that need stronger **Google local visibility** without stacking multiple plugins.

Manage your **main business profile**, output rich **LocalBusiness JSON-LD** structured data, connect **Google Business Profile**, run **NAP consistency** checks, and follow a prioritized **local SEO score** checklist from one dashboard.

* **One plugin, local-first** — Designed to run on its own; no other SEO plugin required for local search fundamentals
* **One main business** — Configure your business profile in **Main business**; used for default schema, NAP checks, and checklist scoring

= Why local businesses choose Local Lift SEO =

* **Local business schema (JSON-LD)** — Organization + LocalBusiness graph, 90+ business types, opening hours, holiday exceptions, geo coordinates, `sameAs`, and service-area (SAB) mode
* **Main business profile** — Single business settings screen for name, address, hours, GBP link, and schema fields (no separate location post type)
* **Google Business Profile integration** — OAuth connect, dedicated GBP admin page, listing link, profile health score, and NAP consistency checks
* **NAP consistency checker** — Compare your website name, address, and phone to Google Business Profile; dashboard alerts and check history
* **Local SEO score & checklist** — Weighted 0–100 score with auto-detected tasks and **Fix it** links
* **Local SEO blocks & shortcodes** — Contact info, OpenStreetMap map (Leaflet.js, lazy-loaded), and business hours for contact pages
* **KML geo file** — Optional `/locallift-locations.kml` geo file for your main business (supplementary to JSON-LD schema)
* **SEO breadcrumbs** — Frontend trails with BreadcrumbList schema and taxonomy parent support
* **SEO title & meta description** — Per page/post editor panel with Google snippet preview, robots, and canonical
* **One-click SEO import** — Migrate post SEO, local business data, and global on-page settings from Yoast SEO or Rank Math

= Built for local search, not generic SEO bloat =

Local Lift SEO focuses on what local rankings need: accurate **NAP data**, valid **local schema markup**, **Google Business Profile** alignment, clear on-site contact signals, and crawlable business metadata — not generic keyword tools you will never use.

= Fully functional on WordPress.org =

This plugin is **free and fully functional** in the WordPress.org directory. Every feature in this download works without payment, activation, trial periods, or usage quotas.

== Installation ==

1. Upload the plugin folder to `/wp-content/plugins/locallift-seo/` or install from the WordPress.org plugin directory.
2. Activate **Local Lift SEO** from the **Plugins** screen.
3. Go to **Local Lift SEO → Main business** and enter your business details.
4. Open **Local Lift SEO → Settings** to configure schema placement, integrations, and breadcrumbs.
5. *(Optional)* Set site-wide SEO defaults under **Settings → On-page SEO** (title separator, fallback OG image).
6. *(Optional)* Connect Google Business Profile under **Settings → Integrations**, link a listing on **Main business**, then open **Google Business Profile** for health and NAP checks.
7. *(Optional)* Switching from Yoast SEO or Rank Math? Go to **Local Lift SEO → Import**, preview the migration, then run the import.
8. *(Optional)* Add **Local Lift** blocks or shortcodes to your contact page.

= Minimum requirements =

* WordPress 6.4 or later
* PHP 8.0 or later
* HTTPS recommended for Google OAuth (GBP connect)

== Frequently Asked Questions ==

= How do I set up my business in Local Lift SEO? =

Go to **Local Lift SEO → Main business** and enter your business name, contact details, address or service area, opening hours, and schema fields. That single profile powers your JSON-LD schema, Local Lift Score, NAP checks, blocks, shortcodes, and KML output.

After saving, open the **Dashboard** to see your score, checklist tasks, and recommended next steps.

= How many businesses can I manage? =

This plugin is built for **one main business** per site. All local SEO data — NAP, hours, schema, GBP link, and checklist scoring — is stored in that **Main business** profile.

= What features are included? =

Local Lift SEO includes:

* **Main business** — business profile for name, address, phone, hours, service area, logo, and Google Business Profile link
* **LocalBusiness JSON-LD schema** — 90+ business types, opening hours, holiday exceptions, geo coordinates, `sameAs`, and service-area (SAB) mode
* **Local Lift Score dashboard** — weighted 0–100 score, prioritized checklist with **Fix it** links, and score history
* **Map Pack Readiness** — dashboard checklist for GBP completeness, NAP alignment, schema, hours, and related local signals
* **Google Business Profile (read-only)** — OAuth connect, dedicated GBP page, listing link, profile health score, and NAP consistency checks
* **NAP consistency checker** — compare site fields to GBP; dashboard alerts and on-demand checks
* **On-page SEO (per post/page)** — SEO title, meta description, robots meta, canonical URL, Google snippet preview, and local schema controls
* **Site-wide on-page SEO defaults** — title separator and fallback Open Graph image under **Settings → On-page SEO**
* **Gutenberg blocks & shortcodes** — Contact Info, Map, and Hours (lazy-loaded assets)
* **SEO breadcrumbs** — shortcode, template tag, and BreadcrumbList schema
* **KML geo file** — optional `/locallift-locations.kml` supplementary file
* **SEO import** — migrate post SEO and local business data from Yoast SEO or Rank Math

= Why is there no Locations menu in the admin? =

Local Lift SEO stores your business in **Main business** (plugin settings), not as a separate WordPress content type. That keeps setup straightforward: one screen for your business details, hours, and integrations.

Blocks, shortcodes, schema, NAP checks, and the Local Lift Score all read from **Main business** by default.

= I upgraded from an older version that used location posts. What happens? =

On upgrade to 1.1.0+, Local Lift SEO automatically migrates your previous primary location into the **Main business** profile when the plugin uses the Main business profile instead of the location custom post type. Your existing schema, dashboard, and checklist data continue to work from that migrated profile.

If you still have location posts in the database from an earlier install, they are not deleted automatically. Re-save **Main business** after upgrading and re-test JSON-LD with Google Rich Results Test.

= Can I import SEO data from Yoast SEO or Rank Math? =

**Yes.** Go to **Local Lift SEO → Import** to migrate:

* **Post & page SEO** — SEO titles, meta descriptions, robots, and canonical URLs
* **Local business data** — Address, phone, hours, and related fields into **Main business**
* **Global on-page settings** — Yoast site-wide defaults into **Settings → On-page SEO** (Yoast only)

Use **Preview import** first to see counts before writing anything. Choose **Fill empty fields only** to keep existing Local Lift values, or **Overwrite** to replace them. The old SEO plugin's database data is never deleted.

For **local business data**, keep Yoast Local or Rank Math active until that import finishes — WordPress may not expose source location data after the source plugin is deactivated.

= Do I need another SEO plugin? =

**No.** Local Lift SEO is a standalone **local SEO plugin** for WordPress. It covers local business schema, a **Main business** profile, Google Business Profile tools, NAP checks, a local SEO score, per-post SEO title and meta description, one-click import from Yoast or Rank Math, contact blocks, KML output, and breadcrumbs in one install — built for businesses that want local search fundamentals without maintaining a second SEO plugin.

= What on-page SEO can I edit for each post or page? =

Every post and page has a **Local Lift SEO** panel where you can set:

* **SEO title** and **meta description** with a Google-style snippet preview
* **Robots** meta (index/noindex, follow/nofollow) and **canonical URL**
* **Local schema** controls where relevant

These values are output in the page `<head>` on the frontend.

= What is Map Pack Readiness? =

**Map Pack Readiness** is a dashboard checklist that evaluates how complete your local SEO setup is for Google Maps and local pack visibility — using your **Main business** data, schema output, hours, GBP connection (when configured), and NAP alignment.

It highlights gaps with **Fix it** links to the relevant admin screens. It is a guidance tool; it does not guarantee rankings or edit your Google Business Profile for you.

= What is the Local Lift Score? =

The **Local Lift Score** is a weighted **0–100** rating on your dashboard that measures how complete your local SEO setup is. It combines on-page schema, NAP completeness, GBP profile health (when connected), hours accuracy, and site↔GBP consistency.

The score updates when you save **Main business**, sync GBP data, or run a NAP check. An actionable **checklist** below the score shows auto-detected and manual tasks with **Fix it** links to the relevant admin screens.

= What is the NAP checker? =

**NAP** stands for Name, Address, and Phone — the core business identity signals search engines use for local rankings.

When you link **Main business** to Google Business Profile, the **NAP consistency checker** compares your WordPress business fields to GBP field-by-field on the **Google Business Profile** admin page and the dashboard. It normalizes phone, address, and hours formatting before comparing (for example, `St` vs `Street`, or `09:00-17:00` vs `9:00 am – 5:00 pm`) and flags **critical** or **warning** mismatches. You can run a check on demand or after saving business details. Use **Copy GBP value** and **Edit main business** for manual fixes. This plugin does not write changes back to Google.

= Where does LocalBusiness schema appear? =

By default, JSON-LD outputs on your homepage, assigned contact/about pages, and other templates you enable under **Settings → Schema** — based on placement rules. Schema is suppressed on unrelated templates (for example, blog posts) so you do not emit duplicate or irrelevant local markup.

= How do I add contact information or a map to a page? =

Use the **Local Lift** blocks in the block editor (**Contact Info**, **Map**, **Hours**) or the matching shortcodes:

* `[locallift_contact]` — name, phone, email, address (use `show="name,phone,email,address"`)
* `[locallift_map]` — embedded map or directions links (use `height="400"` for map height)
* `[locallift_hours]` — weekly opening hours table

By default, blocks and shortcodes use your **Main business** profile. Block and shortcode CSS/JS load only when that content is present on the page.

= Does the map work without an API key? =

**Yes.** The **Local Lift Map** block, map shortcode, and **Main business** address picker use **OpenStreetMap** tiles with **Leaflet.js**. No Google Maps API key is required. Add latitude and longitude on **Main business** (or use the built-in address search and map pin) to show an embedded map. **Get directions** links to Google Maps and Apple Maps are still included below the map. When a supported cookie-consent plugin is active, map tiles load only after the visitor grants consent.

= How do I add breadcrumbs to my site? =

Enable breadcrumbs under **Local Lift SEO → Settings → Breadcrumbs**. Enabling breadcrumbs turns on the feature and BreadcrumbList schema output; it does **not** automatically insert trails into your theme.

Place breadcrumbs with the shortcode `[locallift_breadcrumb]` or the template tag `locallift_breadcrumb()` — see the placement instructions on the Breadcrumbs settings tab. To show breadcrumbs on the homepage, enable **Show breadcrumbs on the front page** and add the shortcode or template tag to your front page template or content.

= How do I connect Google Business Profile? =

1. Create a Google Cloud project and enable the **Google Business Profile APIs** (Account Management and Business Information).
2. Configure the OAuth consent screen and add your site admin as a test user if the app is in Testing mode.
3. Create OAuth 2.0 credentials (Web application) and add the redirect URI shown in **Local Lift SEO → Settings → Integrations**.
4. Paste your Client ID and Client Secret, save, then click **Connect**.
5. On **Local Lift SEO → Main business**, link your business to the correct GBP listing.
6. Open **Local Lift SEO → Google Business Profile** for health scores and NAP consistency checks.

Local Lift SEO uses **read-only** Google Business Profile access. It does not write changes back to Google.

= What is SAB (service-area business) mode? =

If you serve customers at their location and do not have a public storefront, enable **service-area mode** on **Main business**. Local Lift SEO hides the street address on the frontend and outputs valid `areaServed` schema (radius or administrative areas) instead of a fake physical address — a common local SEO mistake.

= What is the KML sitemap and do I need it? =

Local Lift SEO can generate a KML 2.2 file at `/locallift-locations.kml` with a placemark for your main business. This is a **supplementary** geo file.

Your **primary** indexing path is LocalBusiness JSON-LD on key pages plus your WordPress XML sitemap. Submit your XML sitemap in Google Search Console; KML is optional.

= What happens when I uninstall the plugin? =

By default, uninstalling Local Lift SEO **does not** delete your business profile or settings — your data stays in the WordPress database.

To remove all plugin data on uninstall, enable **Delete all Local Lift SEO data when the plugin is deleted** under **Settings → Advanced** before deleting the plugin. That removes business profile data, options, transients, OAuth tokens, and cached GBP data. See the Privacy Policy section below for more detail on stored data.

= Does the plugin send data to Local Lift servers? =

No. Local Lift SEO does not phone home, track your site, or send data to the plugin author. External requests are made only to services you configure (Google Business Profile OAuth) or when maps load OpenStreetMap tiles and geocoding endpoints (see **External services**).

= Where can I get help? =

Use the [WordPress.org support forum](https://wordpress.org/support/plugin/locallift-seo/) for this plugin. Documentation and updates are at [wplocalliftseo.com](https://wplocalliftseo.com).

= Does the plugin require payment or activation? =

**No.** Every feature in this download works without payment, activation, or a trial period — including **Main business**, local schema, on-page SEO fields, GBP connect, NAP checks, blocks, shortcodes, breadcrumbs, import tools, and the Local Lift Score dashboard.

= Does this plugin use external services? =

**Yes, optionally.** When you configure integrations or use map features, the plugin or your visitors' browsers may contact **OpenStreetMap** (map tiles and geocoding) and **Google** services (Google Business Profile APIs and Google OAuth). See the **External services** section below for what is sent, when, and links to terms and privacy policies. The plugin does not send site data to Local Lift servers.

== Screenshots ==

1. Local Lift Score dashboard with weighted score ring, checklist tasks grouped by priority, and progress bar.
2. Main business screen with business details, address or geo, service area, and opening hours tabs.
3. Integrations settings for Google Business Profile OAuth connect and OpenStreetMap map guidance.
4. Google Business Profile page with health score and NAP consistency checker.
5. Breadcrumbs settings with enable toggle, homepage option, and shortcode or template tag placement instructions.

== Changelog ==

= 1.2.3 =
* **WordPress.org compliance** — Simplified admin codebase for directory review
* **Admin polish** — Consistent dark-mode colors for WordPress admin notices (success, error, warning, info) across Dashboard, Settings, Main business, GBP, Onboarding, and Import
* **Main business** — Header **Save** button correctly submits the business profile form
* **Asset cleanup** — Removed unused CSS and JS from admin stylesheets and the post SEO metabox script
* **Stability** — No database migration required; safe update for all sites

= 1.2.2 =
* **WordPress.org Plugin Directory review** — Security and compliance update for resubmission
* **Input sanitization** — Sanitize POST and GET values at the point of use in post SEO, location editor, onboarding, import tools, score dashboard, and Google Business Profile notice handling
* **Output escaping** — Escape breadcrumb wrapper markup before rendering frontend trails
* **Nested data** — Harden sanitization for location hours, holiday exceptions, and service-area arrays submitted from admin forms
* **Stability** — No database migration required; safe update for all sites

= 1.2.1 =
* **Admin v2 redesign** — Modern dashboard shell with command bar, tabbed panels, KPI cards, and light/dark theme toggle across core admin screens
* **Settings hub v2** — Left-rail navigation grouped into Essentials, Connections, and Account & power; refreshed cards, forms, notices, and tab content styling
* **Main business v2** — Command bar, profile completeness KPI strip, tabbed location editor, schema readiness sidebar, and inline help tooltips matching the new design system
* **Import wizard v2** — Full-screen guided migration with progress rail, step panels, preview/run progress cards, and dark-mode notice styling
* **Google Business Profile UX** — Integrations connected-state summary card; outlined refresh (green) and disconnect (red) action pills on the GBP workspace
* **Shared v2 styling** — `admin-v2-guard.css` cascade for consistent buttons, inputs, and surfaces; legacy admin CSS dequeued on v2 screens
* **Release packaging** — Org zip build excludes local `styling-reference/` dev assets from `dist/locallift-seo.zip`
* **Stability** — Admin v2 CSS isolation fixes; setup wizard styling parity on fresh installs

= 1.2.0 =
* **Maps:** Replaced Google Maps with **OpenStreetMap** tiles and **Leaflet.js** for the Local Lift Map block, map shortcode, block editor preview, and Main business address picker
* **No Maps API key required** — embedded maps render when your business has coordinates; Google Maps API key setting removed from Integrations
* **Main business address picker** — OpenStreetMap search, draggable pin, and automatic address field fill (street, city, region, postal code, country, coordinates)
* **Geocoding** — Admin address search and reverse geocoding use OpenStreetMap Nominatim via the plugin REST API (server-side proxy with compliant User-Agent)
* Cookie-consent and lazy-loaded map behavior retained for frontend map blocks
* **Get directions** links (Google Maps and Apple Maps) unchanged below embedded maps
* **Google Business Profile page** — Dedicated admin screen for GBP health score and NAP consistency checks (read-only)
* **NAP checker** — 24-hour hours comparison, Main business edit links, inline feedback after manual checks on the GBP page
* **SEO import hardening** — Local business import writes to **Main business**; Yoast/Rank Math posts with unsupported SEO fields are skipped; multi-step import notices merge totals; import type checkboxes follow the selected source plugin; Yoast global import only appears when source settings exist

= 1.1.0 =
* **Main business** — Single business profile stored in settings (no location custom post type)
* One **Main business** profile per site by design (not multi-location posts)
* **Main business** admin screen for name, address, service area, hours, GBP link, and schema fields
* Dashboard **Local Lift Score**, **Map Pack Readiness**, GBP health, and NAP checker use main business when the location CPT is disabled
* Migration copies legacy primary location CPT data into the business profile option on upgrade
* Fix JSON-LD output so schema validates in Google Rich Results Test and schema.org (valid JSON in `application/ld+json` scripts)
* GBP Integrations card: connected status styling, action buttons in one row
* Checklist copy: GBP task clarifies OAuth connect vs linking a listing on Main business
* Hide **Locations** and **Add Location** admin submenu items when the location CPT is disabled

= 1.0.1 =
* **WordPress.org Plugin Directory review** — Compliance and clarity updates for resubmission
* Removed restrictive admin limits from this build; on-page SEO title, meta description, robots, canonical, and local schema controls remain fully available
* Documented Google Maps, Google Business Profile, and Google OAuth under **External services** (data sent, when, terms, and privacy links)
* Updated plugin homepage to [wplocalliftseo.com](https://wplocalliftseo.com)
* Admin styling uses WordPress enqueue APIs (`wp_enqueue_style` / `wp_add_inline_style`) instead of raw inline `<style>` tags where flagged
* Security hardening for admin requests, input sanitization, and output escaping (including JSON-LD script output and shortcode HTML)
* Removed redundant `load_plugin_textdomain()` call (WordPress.org loads translations automatically)
* Block editor labels use translatable literal strings for i18n compatibility
* Readme FAQs updated to reflect the fully functional feature set in this download

= 1.0.0 =
* **WordPress.org launch** — First public release on the plugin directory
* Local SEO dashboard with weighted Local Lift Score and actionable checklist
* LocalBusiness JSON-LD with 90+ business types, opening hours, holiday exceptions, and service-area (SAB) mode
* On-page SEO panel — per page/post SEO title, meta description, robots, canonical, and Google snippet preview
* **SEO import tool** — Migrate post SEO, local business data, and Yoast global settings from Yoast SEO or Rank Math
* Google Business Profile connect (read-only), NAP consistency checker, and SEO breadcrumbs with BreadcrumbList schema
* Gutenberg blocks and shortcodes (contact info, map, hours), KML sitemap, and location XML sitemap integration

= 0.8.0 =
* **SEO import tool** — Migrate post SEO, local business data, and Yoast global on-page settings from Yoast SEO or Rank Math (**Local Lift SEO → Import**)
* **On-page SEO panel** — Per page/post SEO title, meta description, robots, canonical, and Google snippet preview
* Local SEO dashboard with weighted score, checklist, and GBP health widgets
* LocalBusiness JSON-LD schema with 90+ business types, hours, and service-area mode
* Google Business Profile connect (read-only), NAP consistency checker, and breadcrumbs
* Breadcrumbs: frontend trails, BreadcrumbList schema, settings tab, shortcode, and taxonomy parents per post type
* NAP checker: polished admin log (last 10 checks) and dashboard mismatch alerts
* CI test matrix: PHPUnit on PHP 8.0–8.3 and WordPress 6.4–6.7

= 0.7.0 =
* Local Lift Score engine, checklist dashboard, score history, and weekly recalculation
* GBP OAuth connect, read-only profile data, health score widget, and encrypted token storage
* NAP consistency checker with normalization, dashboard alerts, and manual check
* Cache compatibility layer for popular caching plugins

= 0.6.0 =
* Business logo upload, schema validation card, and score reliability improvements
* Google Maps cookie-consent overlay and lazy-loaded map block
* Location XML sitemap integration and KML schema link

= 0.5.0 =
* Gutenberg blocks (contact, map, hours) and matching shortcodes
* KML sitemap at `/locallift-locations.kml`
* Opening hours UI with holiday exceptions and SAB mode

= 0.1.0 =
* Initial release: location CPT, rich LocalBusiness schema, and admin settings

== Upgrade Notice ==

= 1.2.3 =
WordPress.org compliance update: simplified admin codebase and improved dark-mode admin notice styling across v2 screens. Safe update — no settings migration required.

= 1.2.2 =
WordPress.org review update: improved input sanitization and output escaping across admin screens. Safe update for all sites — no settings migration required.

= 1.2.1 =
Admin UI refresh: Dashboard, Settings, Main business, Import, and Google Business Profile screens use the new v2 design with optional dark mode. No database migration required — hard-refresh your browser after updating if styles look cached.

= 1.2.0 =
Maps now use OpenStreetMap and Leaflet.js — no Google Maps API key is needed. Remove any saved Maps API key from older versions (it is no longer used). Re-save **Main business** coordinates if you rely on the embedded map block or shortcode.

= 1.1.0 =
Main business mode: configure your business under **Local Lift SEO → Main business** instead of location posts. Existing primary location data migrates automatically on upgrade. Re-test schema with Google Rich Results after updating.

= 1.0.1 =
WordPress.org review update: external Google services documented, security and enqueue improvements, and a fully functional feature set. Safe update for all sites.

= 1.0.0 =
First WordPress.org release. Includes local schema, GBP integration, NAP checker, on-page SEO, Yoast/Rank Math import, blocks, KML, breadcrumbs, and the Local Lift Score dashboard. Review **Settings → Integrations** before connecting Google Business Profile.

= 0.8.0 =
Adds on-page SEO (title, meta, robots, canonical), Yoast/Rank Math import, breadcrumbs, NAP check history, and dashboard improvements. Review **Settings → Integrations** before connecting Google Business Profile.

== Privacy Policy ==

Local Lift SEO stores business and configuration data in your WordPress database. The plugin does **not** collect analytics or send site data to the plugin author.

= Data stored locally =

* Business profile details (name, address, phone, hours, geo coordinates, schema settings)
* Plugin settings and checklist/score history
* NAP check results and recent check log
* OAuth tokens and API credentials you provide (encrypted at rest)

= Google Business Profile (optional) =

When an administrator connects GBP, the plugin:

* Sends OAuth requests to `accounts.google.com` and `oauth2.googleapis.com`
* Calls Google Business Profile APIs (`mybusinessaccountmanagement.googleapis.com`, `mybusinessbusinessinformation.googleapis.com`) to list accounts/locations and read business profile fields (name, address, phone, hours, categories, reviews summary)
* Stores the OAuth refresh token and client secret **encrypted** using AES-256-CBC with WordPress security salts
* Caches API responses in WordPress transients (approximately 6 hours) to reduce API usage

Disconnecting GBP in plugin settings deletes stored tokens, connected account metadata, and cached GBP data.

= OpenStreetMap (maps) =

When you use the map block, map shortcode, or Main business address picker:

* Visitors' browsers may load map tiles from `tile.openstreetmap.org` when the map enters the viewport (or after cookie consent when a supported consent plugin is active)
* Administrators searching or pinning an address trigger geocoding requests from your WordPress site to `nominatim.openstreetmap.org` (proxied server-side with a plugin User-Agent string)
* Map tile and geocoding requests include coordinates or address search terms and standard HTTP referrer information

No Google Maps JavaScript API key is required for embedded maps in this version.

= Google Search Console =

The plugin provides admin links to Google Search Console and Rich Results Test. It does **not** connect to Search Console APIs or access your GSC account.

= No third-party tracking =

Local Lift SEO does not include telemetry, affiliate tracking, or remote callbacks to the plugin author.

= Data export and erasure =

Uninstall behavior is controlled in **Settings → Advanced**. When "Delete all Local Lift SEO data when the plugin is deleted" is enabled, business profile data, options, and cached data are removed on plugin deletion. When disabled, your data remains in the database.

For GDPR-related requests, site administrators can export or delete plugin data through standard WordPress tools or by removing the plugin data as described above.

== External services ==

This plugin connects to the following third-party services:

= OpenStreetMap =

* **What the service is and what it is used for:** OpenStreetMap provides map tiles and geocoding data for the **Local Lift Map** block, map shortcode, and Main business address picker (via Leaflet.js in the browser and Nominatim for address search).
* **What data is sent and when:** When a visitor views a page with an embedded map, the browser loads tiles from `https://tile.openstreetmap.org/`. When an administrator searches for an address or moves the map pin, your WordPress site sends geocoding requests to `https://nominatim.openstreetmap.org/` (search and reverse geocode). Requests include address or coordinate data and standard HTTP referrer information.
* **Service provider:** OpenStreetMap contributors (tiles); geocoding operated by the OpenStreetMap Foundation (Nominatim)
* **Terms of service:** https://www.openstreetmap.org/copyright
* **Privacy policy:** https://osmfoundation.org/wiki/Privacy_Policy
* **Nominatim usage policy:** https://operations.osmfoundation.org/policies/nominatim/

= Google Business Profile APIs =

* **What the service is and what it is used for:** Google OAuth and Google Business Profile APIs let site administrators connect a Google account, list GBP accounts and locations, and read business profile fields for health scores and NAP consistency checks. The plugin uses read-only access; it does not write changes back to Google.
* **What data is sent and when:** When an administrator saves OAuth credentials, clicks **Connect**, or runs GBP-linked actions, the plugin sends OAuth authorization requests to `https://accounts.google.com` and `https://oauth2.googleapis.com`, then calls Google Business Profile API endpoints (`mybusinessaccountmanagement.googleapis.com`, `mybusinessbusinessinformation.googleapis.com`) with the stored OAuth token to read account and location data (business name, address, phone, hours, categories, and related profile fields). API responses are cached in WordPress transients for approximately six hours.
* **Service provider:** Google LLC
* **Terms of service:** https://cloud.google.com/terms
* **Privacy policy:** https://policies.google.com/privacy

= Google OAuth (credential connect flow) =

* **What the service is and what it is used for:** Google OAuth 2.0 authorizes the plugin to access Google Business Profile APIs on behalf of the connecting administrator.
* **What data is sent and when:** When an administrator initiates GBP connect, the browser is redirected to Google with your OAuth client ID, requested scopes, and the plugin redirect URI. Google returns an authorization code to your site, which the plugin exchanges for access and refresh tokens server-side.
* **Service provider:** Google LLC
* **Terms of service:** https://cloud.google.com/terms
* **Privacy policy:** https://policies.google.com/privacy
