Privacy Policy
Effective: May 13, 2026 Last updated: October 21, 2026
This policy explains what Bodholdt Labs collects when you use bodholdtlabs.com or any of the WordPress plugins or apps we publish, how we use it, who we share it with, and the rights you have over it. We wrote this in plain English on purpose. If anything here is unclear, email us at support@bodholdtlabs.com.
1. Who we are
Bodholdt Labs is an independent one-person software studio operated by Bodholdt Labs LLC, a California limited liability company. We design and sell WordPress plugins directly to customers from our own infrastructure, and we publish Bodholdt Viewer, a free Mac app.
For the purposes of the California Consumer Privacy Act (CCPA) and the EU/UK General Data Protection Regulation (GDPR), the data controller is:
Bodholdt Labs LLC
A California limited liability company
3992 Foothills Blvd Ste 100 #77
Roseville, CA 95747, United States
Contact: support@bodholdtlabs.com or legal@bodholdtlabs.com
2. What we collect, and why
We collect the categories below to sell and support our products, operate optional services you use, and keep the site secure.
Legal bases for processing
- Contract: processing needed to take payment, deliver and administer licenses, provide support, and operate a product or optional service you use. For the withdrawn Backup Bundle, Bodholdt Vault, and Bodholdt Watch, only the historical financial, license, activity, security, and privacy-rights records described below remain; no product, recovery, provider, or Watch operation remains for those.
- Legitimate interests: protecting the service, preventing abuse and fraud, and diagnosing reliability. They also include counting the sites that run our plugins, from their update checks, and how often the contact button is used. We minimize this data, apply retention limits, and honor applicable objection rights.
- Legal obligations: tax and accounting records, valid legal process, privacy-rights requests, and security or breach duties.
- Consent: only where we separately ask for it, such as an optional newsletter. Core purchase, licensing, security, and support processing does not rely on consent.
When you buy a plugin
- Email address (you provide it at checkout). We use it to deliver your license key, send receipts, and reach you about your subscription.
- Payment information (card details, billing address, name on card). This is handled by Stripe. We never see your full card number. Stripe shares back the last four digits, card brand, expiry, and country, which we store with your order record.
- Billing country: used by Stripe to calculate any applicable sales tax (VAT/GST).
- Order metadata: which plugin and which tier you bought, the price you paid, the transaction ID, and your subscription status (active / canceled / past due).
- License and fulfillment records: the domain name(s) where a license was activated, the applicable site limit, and fulfillment history. We retain the financial and license records needed for accounting, tax, chargeback, security, and audit purposes, including historical records for the withdrawn Backup Bundle. Bodholdt Backup for Google Drive and Bodholdt Backup for OneDrive were reinstated on August 15, 2026 and are administered like any other current product. Any residual Cloudflare Worker route is hard-closed and rejects ingress until the route is removed. Earlier installed copies could attempt to send the historical Bodholdt Watch telemetry described below, but it is not accepted.
- License activity log: we keep a log of license events so we can answer the question “why did this key stop working” when you write to us. Each entry records what happened (a key created, activated, deactivated or revoked, or a payment that succeeded, failed or was refunded), the license key involved, a short description, the IP address the request came from, and the time. For an activation or deactivation made by your WordPress site, that IP address is your server’s. If you remove a site from your license on the My Account page, it is the IP address of the browser you used. Payment events also keep Stripe’s reference numbers for the event and for the subscription or payment it concerns, with the event’s type, status and time, so the same notice from Stripe is not applied twice and an older one cannot overwrite a newer one.
- Reviews: if you post a review from the My Account page, we keep it with your email address and license key, and we show the name you give (or “Verified Customer”), your rating, title and text, with the date, on the plugin’s page, where search engines can read them too. You can change it there, or ask us to remove it.
- Update notice signups (email address, product, whether it is pending, confirmed or unsubscribed, the page you gave it on, and the sign-up, confirmation and unsubscribe times): a signup you never confirm is deleted automatically after 30 days by a daily job. A confirmed entry is kept until you unsubscribe. An unsubscribed entry is kept only so the address is not added again by mistake, and you can ask us to delete it outright at any time.
Payments
Payments are processed through Stripe. Where checkout identifies Sold through Link, LLC as merchant of record, Link handles payment processing, applicable tax collection and remittance, refunds, and chargebacks for that eligible transaction. Bodholdt Labs remains the provider and seller of the plugin, license, updates, and support. Your full payment details go directly to Stripe and never touch our servers. Stripe shares the customer and purchase details we need to issue your license, send your receipt, and support the order. Stripe’s privacy policy applies to payment processing. Earlier subscriptions may continue to be billed with Bodholdt Labs LLC as merchant of record.
When you contact support
- Your email message and email address. We use it to answer you and resolve the issue. We keep support history so we can pick up where we left off if you write again. Our support desk has an optional AI co-pilot that can draft a reply or summarize a support conversation. It is switched off. Before we switch it on, we will update this policy to say what it would send to Anthropic. If you write to us through the form on our Support page, we keep the name, email address, subject and message you enter, and any files you attach (up to 5, 10 MB each), with your ticket. To stop abuse, the form counts requests from your IP address for an hour, and so do requests in My Tickets for a sign-in link or to add another email address. If you add another email address to My Tickets, we keep the link between your addresses with your support history.
When you simply visit the site
- IP address and basic request metadata (browser user-agent, referring URL, requested page, timestamp). These are processed automatically by our CDN and security stack and used to deliver pages, block abuse, and aggregate traffic patterns.
- The contact button. Opening it is not counted and sends nothing to us. When someone uses it, the site adds one to that day’s count at each step: entering an email address, being sent a code, and sending the message. Those counts hold nothing about you and cover the most recent 30 days with activity. So that automated traffic cannot abuse the button, its limits record your IP address, and the email address you enter, as keyed hashes rather than the addresses themselves, and delete them within about three hours. Separately, when you are sent a code, the email address itself is kept in a short-lived verification record until ten minutes after your last step, and is deleted within the hour after that. A message you send is handled like any message to support, as described under When you contact support.
- Cookies: none while you browse. One is set only when you sign in to an account here, when you enter your email in the contact button, or when you sign in to My Tickets. Section 4 lists them.
When you ask for update notices
Downloading a plugin never asks for an email address, and that is not changing. Separately, you can choose to give us one so we can tell you when there is a new release. If you do, we store the address, which product you gave it for, whether the signup is pending, confirmed or unsubscribed, the page you gave it on, the times you signed up, confirmed and unsubscribed, and one random code that your confirm and unsubscribe links carry. Nothing else. We do not store your IP address against it and we do not set a cookie.
You are not on the list until you click a confirmation link sent to that address, so the record of your consent is something you did, not something we assert. Every message we send has an unsubscribe link. The address goes to our email provider so the message can be delivered, and to nobody else. It is never sold, never shared, and never used for anything but release notices.
We do not collect: real-time location, device IDs, advertising identifiers, biometric data, financial-account numbers, government IDs, or social-graph data. We do not run behavioral retargeting pixels (no Facebook Pixel, no Google Ads, no LinkedIn Insight tag).
How our plugins handle data on your own site
The section above covers data we collect through bodholdtlabs.com. Most plugin processing happens on your WordPress site through services you connect. Every plugin, free or paid, asks bodholdtlabs.com for updates. That request carries your site address and a version number in its user agent: the plugin’s for the free plugins, WordPress’s for the paid ones. Paid plugins also send their license key and your site address to check the license. Bodholdt Watch and Bodholdt Vault are retired and have no hosted software, update, recovery, or telemetry service. The list below explains current data flows and the limited historical records we retain.
- Backup for Google Drive and Backup for OneDrive: these products connect to your Google Drive or Microsoft OneDrive through an application you register and control, and upload your site’s archives directly from your server into your own account. Bodholdt Labs never receives your archives and never holds your provider credentials. The Backup Bundle remains withdrawn. Backup archives remain in your Google or Microsoft account. The August 2026 withdrawal did not access, delete, move, or transfer them, and Bodholdt Labs does not receive them. You decide whether to retain or delete those files. Google’s terms and privacy policy, and Microsoft’s terms and privacy statement, continue to govern data in those accounts. You can review and revoke this site’s access to your Microsoft account at any time at account.live.com/consent/Manage, or for a work or school account at myapps.microsoft.com; Google connections can be revoked at myaccount.google.com/permissions.
- Bodholdt Vault: this prototype is permanently retired. It was not launched as a customer storage service, did not vend provider credentials, and did not receive or store customer backup archives.
- Possible future backup product. We have not launched a SharePoint backup product. Any future product would be separately named and offered, use a new consent and provider configuration, and be covered by the privacy notice and terms then in effect; it is not a continuation of or entitlement under a retired product.
- Bodholdt Licensing: if you run your own license server with it, it processes your customers’ emails, license keys, and payments on your infrastructure and your Stripe account. We never receive your customers’ data.
- Bodholdt Tickets (and the free Bodholdt Tickets edition): stores your customers’ tickets in your database. Optional features reach outside services only when you enable them and supply your own keys. The AI co-pilot sends a ticket to Anthropic, using your own Anthropic API key, when an agent asks for a draft or a summary or, if you turn on Auto-pilot, as each ticket arrives: the subject and conversation, and the customer’s name and email. In the paid edition, when Bodholdt Licensing’s license records are on the same site, it also sends the customer’s plan, how many active licenses they hold, their products and their next renewal date. For drafts and Auto-pilot it also sends your desk and site name and any brand-voice instructions and knowledge-base notes you give it, and asking for a summary also sends the ticket’s internal notes. Drafts are never sent to your customer automatically. Browser Web Push sends agent notifications through your agents’ own browser push services. We never receive your tickets.
- Bodholdt Backup Pro: this paid companion works only alongside Bodholdt Backup for Google Drive or Bodholdt Backup for OneDrive. Once its license is active, it posts backup events, such as each run’s result, to a Slack or Discord webhook if you add one, and it sends a backup-health digest. The digest is on by default: weekly, by email, to your site’s admin email address unless you enter another address or send it to Slack or Discord instead. These messages carry the status of your own backups and your site’s address, are sent from your site to your inbox, Slack or Discord, and Bodholdt Labs never receives them. Slack’s and Discord’s own terms govern data once it reaches those services. To stop everything it sends on its own, save no webhook URLs and turn the digest off on the Backup Pro screen. Its license and update checks still reach bodholdtlabs.com, as described under License checks & updates. The emails your backup plugin sends after every backup are separate and are not changed by these settings.
- Bodholdt Contact: a contact-form widget. Submissions are stored on your site and delivered through your site’s own email. No external service is involved, apart from the update check every plugin makes to bodholdtlabs.com (see above).
- Bodholdt Atelier (and the free Bodholdt Atelier edition): a storefront for selling what you make. It keeps your buyers’ orders (with shipping addresses and VAT numbers), licenses, commissions, subscriptions, bookings, newsletter sign-ups and your notes on contacts in your own WordPress database. It can set three kinds of cookie on your storefront, each for 30 days: one when a visitor arrives through an affiliate link, one for trade pricing, and one that remembers a password-protected gallery the visitor has opened. Its optional features reach outside services only when you switch them on: the order amount and the name of what was bought go to Stripe or PayPal, with the buyer’s email for Stripe, and the buyer pays on Stripe’s or PayPal’s own page; a subscriber’s email and name go to your newsletter provider, such as Mailchimp or Kit, after they confirm their sign-up; a buyer’s name and email and the details of the print go to theprintspace or FinerWorks for printed orders; if you switch on EU VAT and a buyer enters a business VAT number, that number and the buyer’s country go to the European Commission’s VIES service to check it; and, if you switch on Bitcoin timestamping, a hash with no personal data in it goes to OpenTimestamps. Its fonts are served from your own site. We never receive your buyers’ data. Its update checks, and the paid edition’s license checks, reach bodholdtlabs.com, as described under License checks & updates and Free-edition update checks.
- Gamification (the arcade). When the Fun Pass is on, our plugins record your own progress (XP, levels, streaks, and trophies) and simple activity counts in your WordPress database. It never leaves your server, is never sent to us or any third party, and can be turned off in the plugin’s settings.
- License checks & updates: all paid plugins periodically validate their license key against our license server at bodholdtlabs.com to confirm the subscription is active and to offer updates. This sends the license key and the activated site domain (see Section 2); nothing about your site’s content is sent. We also count their update checks by site, as we do for the free editions.
- Free-edition update checks: Bodholdt Backup for Google Drive, Bodholdt Backup for OneDrive, Bodholdt Contact, and the free editions of Bodholdt Tickets and Bodholdt Atelier cache a good answer for twelve hours, so each checks no more than about twice a day. A failure is cached for one hour instead, so while our server is unreachable a plugin can ask up to once an hour until it gets an answer. Nothing from your site’s content, database or backups is sent. These requests are kept in the server access logs described in Section 5, and we count them by site to see how many sites run each plugin. The Google Drive, OneDrive and Contact readmes name the filter that turns the check off.
Bodholdt Watch
Bodholdt Watch was a limited-beta monitoring service and no longer operates. Earlier enabled releases reported the site address; backup success or failure; time, size, and duration; archive count and schedule; a bounded error message when a backup failed; and the email address attached to the license. Bodholdt Labs removed the WordPress sender, alerts, schedules, and sender credentials. The Cloudflare Worker route has either been removed or is hard-closed to return HTTP 410 without accepting ingress while its route is removed. We retain only the minimum historical records needed for the published retention schedule and privacy-rights requests; Cloudflare D1 is the processor for those records. Watch never received backup archives, site files, or database contents. You can request export or deletion by emailing support@bodholdtlabs.com. Cloudflare Time Travel recovery history may preserve an earlier database state for up to 30 days after a change or deletion.
Our apps
Bodholdt Viewer runs on your device and connects directly to the computers you tell it to. We never see those connections, the addresses you save, or your passwords: saved passwords stay in your device’s own keychain.
Update checks (macOS). The Mac app asks whether you want it to check for updates automatically. If you agree, it asks bodholdtlabs.com from time to time whether a newer version exists; you can also check by hand from its menu. It downloads a new version from there when you agree. That request, like any request to a website, carries your IP address and the app’s version. We use them only to answer. Our server’s access log for these requests does not record your IP address: it keeps a line for each request (the time, the file asked for, and the app’s name and version) for about two weeks, and daily totals of update checks and downloads per version. If serving a request fails, the web server’s error log records its address, as it does for any failed request, for the same time. We do not collect any other information about your Mac.
Where the app is offered. Some countries and regions cannot download or update the app, for export-control reasons, and the app is not offered in the European Union, the European Economic Area or the United Kingdom. To apply that, our server looks up the country your request appears to come from, using the information Cloudflare (our network provider) adds to it. The country is used only to decide whether to offer and serve the download, and is not stored. To make the same decision, our server also checks the request’s IP address against blocked address ranges, such as those web archivers use. That check does not store your address either.
On iPhone and iPad. When the app is available there, the App Store distributes and updates it. Apple may then share anonymous usage figures and, if you have agreed to it on your device, crash reports with us; Apple’s privacy policy governs what Apple collects.
Supporting the app. If you choose to support Bodholdt Viewer, you pay on Stripe’s own page. Where checkout identifies Sold through Link, LLC as merchant of record (Stripe Managed Payments), Link handles the payment and charges and pays any sales tax that applies. Stripe receives your payment details and the address needed to work out that tax; we receive a record of the payment. Stripe’s privacy policy applies.
3. Who processes your data on our behalf (subprocessors)
We use a small number of third-party services to run the business. Each is listed below with its role and a link to its own privacy policy. You can ask us at any time for the current list.
| Service | What it does | Data it sees |
|---|---|---|
| Stripe, Inc. (privacy) | Payment processing | Card details, billing address, IP at checkout |
| Cloudflare, Inc. (privacy) | DNS, CDN, web application firewall, DDoS protection; Bodholdt Watch API and D1 database | Visitor IP and request metadata; for retained historical Watch records, site and license identifiers, license email, backup telemetry, bounded error text, and an email-alert flag. Watch alerts are removed, and the Worker route is removed or hard-closed to HTTP 410 without accepting ingress. Earlier beta clients could submit webhook endpoints; legacy plaintext endpoint fields were scrubbed. |
| Wordfence (Defiant, Inc.) (privacy) | WordPress firewall and malware scanning | Visitor IP, request metadata for threat detection |
| Postmark (AC PM LLC) (privacy) | Outbound transactional email: license keys, receipts, password resets, and account notifications. Inbound: a copy of email you send to our support address is delivered to Postmark and parsed so that it can open a ticket | Your email address, the subject line and body of the email. For inbound mail, Postmark receives the message as you sent it, including any attachments, even though the ticket keeps only the text |
| Microsoft 365 (Microsoft Corporation) (privacy) | Hosting our @bodholdtlabs.com support mailbox and receiving inbound mail |
Email you send to us and our replies |
| Anthropic, PBC (privacy) | AI-assisted drafting of support replies (our Bodholdt Tickets co-pilot). It is switched off. | Nothing while the co-pilot is switched off |
We will update this section whenever we add or remove a subprocessor.
We do not sell your personal information to anyone, and we do not share it with advertisers or data brokers.
4. Cookies and similar technologies
We use very few cookies, all functional, none for advertising. Browsing bodholdtlabs.com sets no cookies. An ordinary page request returns no Set-Cookie header, and every file a page loads comes from bodholdtlabs.com. You can check both yourself in your browser’s network panel.
- WordPress session cookies: set only when you sign in to an account on this site, and used to keep you signed in.
- bodholdt_contact_flow: set when you enter your email in the contact button. It keeps your place in that one message, expires ten minutes after your last step, cannot be read by scripts, and is deleted once your message is sent.
- bt_portal: set when you sign in to My Tickets with an emailed link. It keeps you signed in for seven days and cannot be read by scripts. The site keeps your email address with it for the same seven days, and signing out removes it.
We do not use cookies to track you across other websites, and we do not keep any pricing-page or shopping state in localStorage or sessionStorage. The billing-interval toggle on /buy-plugins/ is held in memory only and resets on page reload. We do not have a cookie consent banner because we do not load any cookies that require opt-in consent under GDPR or ePrivacy for the basic functioning of the site. If we ever add analytics or advertising cookies in the future, we’ll publish a consent banner before that change goes live.
5. How long we keep your data
- Order and license records: as long as your license is active, plus seven years after cancellation, to satisfy U.S. tax and accounting requirements.
- Support emails: indefinitely while we have a relationship with you, unless you ask us to delete them.
- Support form attachments: kept with the ticket for as long as we keep that support history, and deleted with the ticket or when you ask us to delete your data.
- Email in transit at Postmark: we use Postmark’s default retention for message content, which is 45 days on our plan. That copy is separate from the ticket itself, which is covered above.
- Server access logs (IP, user-agent, URL), including plugin update checks, whose user agent carries your site’s address: rotated automatically. Retention is typically 30 days at Cloudflare, 14 days at the origin server. Wordfence keeps a longer retention for security events (default 30 days).
- Update-check logs for our apps (time, file asked for, app name and version; no IP address): about two weeks at the origin server.
- License activity log (event, license key, IP address, Stripe references, timestamp): 90 days, after which entries are deleted automatically by a daily job.
- Historical Watch records: Watch no longer enrolls, ingests, alerts, or runs scheduled jobs. Existing heartbeat rows are kept for 90 days; alert history and exhausted delivery jobs for 180 days; raw licensing-event bodies are minimized after 30 days and the reduced audit row expires after 365 days; finalized reconciliation metadata is kept for 30 days and incomplete staging for 48 hours. Direct identifiers on retired, canceled, refunded, missing, or privacy-deleted site rows are minimized after 30 days. A deletion request clears telemetry and identifiers subject to legal retention requirements. Cloudflare Time Travel recovery history may retain an earlier database state for up to 30 days.
6. Your rights
Everyone
- Access: you can request a copy of the personal data we hold about you.
- Correction: you can ask us to fix anything that’s wrong.
- Deletion: you can ask us to delete your account and associated personal data. We may retain records required for tax, accounting, legal claims, or security. For Watch, deletion retains only the pseudonymous site identifier and suppression state needed to prevent an old token from re-enrolling the site; Cloudflare recovery history may retain the prior database state for up to 30 days.
- Portability: you can ask for your data in a structured, machine-readable format.
If you’re in the EU/UK (GDPR)
In addition to the rights above, you can:
- Object to processing or restrict processing where the legal basis is our legitimate interest.
- Withdraw consent for processing that’s based on consent. (We don’t currently rely on consent as a legal basis for anything except optional newsletter opt-ins.)
- Lodge a complaint with your local supervisory authority. A list of EU authorities is at edpb.europa.eu.
If you’re in California (CCPA / CPRA)
In addition to the rights above:
- Right to know the specific pieces of personal information we have collected about you.
- Right to opt out of sale or sharing: we don’t sell or share your personal information for cross-context behavioral advertising, so there is nothing to opt out of, but you have the right to confirm that.
- Right to limit use of sensitive personal information: we don’t collect sensitive personal information as defined by the CPRA.
- No discrimination for exercising your privacy rights.
To exercise any of these rights, email support@bodholdtlabs.com from the email address associated with your account. We’ll respond within 30 days. We may need to verify your identity before acting on the request.
7. International data transfers
We are based in California, and the processors listed above may process data in the United States and other countries described in their notices. The current Watch D1 primary is in Cloudflare’s Western North America region and was created without an EU jurisdiction restriction. Where EU/UK transfer rules apply, the relevant provider’s applicable data-protection terms and transfer mechanism may include an adequacy decision, Data Privacy Framework certification, or Standard Contractual Clauses. Email legal@bodholdtlabs.com for the current mechanism and safeguards for a particular service before sending regulated data.
8. Children’s privacy
Bodholdt Labs sells business software. Our products are not directed at children under 16. We do not knowingly collect personal information from anyone under 16. If you believe a child has provided us with personal information, please email us and we will delete it.
9. Security
We take reasonable steps to protect your data:
- All traffic is encrypted in transit via HTTPS (TLS 1.2 or higher).
- Card data never touches our server. Stripe Checkout handles it directly.
- Passwords are stored hashed (bcrypt). We never see your plaintext password.
- Two-Factor Authentication is required on the admin account.
- The WordPress install is behind Cloudflare’s WAF and Wordfence’s firewall, with the WP login URL relocated to a non-default path.
No system is perfectly secure. If we ever experience a breach affecting your personal information, we will notify you and the relevant regulators within the timeframes required by applicable law (72 hours under GDPR, “without unreasonable delay” under California breach-notification law).
10. Changes to this policy
We may update this policy as the business grows. When we make a material change, we’ll update the “Last updated” date at the top and, where appropriate, email customers whose data we hold. Continued use of the site after a change means you accept the updated policy.
11. Contact
Privacy questions, data requests, or concerns:
support@bodholdtlabs.com
Bodholdt Labs LLC, 3992 Foothills Blvd Ste 100 #77, Roseville, CA 95747, United States
We aim to respond within two business days.