Description
PaywallProject helps publishers sell access to protected content with Stripe-powered subscriptions, gifts, coupons, subscriber management, and reporting.
Learn more, read the documentation and get support at paywallproject.com.
Payments and fees
Payments go through Connect with Stripe. Connect your Stripe account in one click, with no API keys or webhooks to set up. PaywallProject charges a platform fee of 10% on each payment, on top of Stripe’s own fees. The fee is shown on the Connect button before you agree to it.
AI Shield
Keep AI companies from crawling your stories while Google, Bing and other search engines index your site as before. Turn it on under Settings AI Shield and PaywallProject adds a rule for each AI crawler to your robots.txt — training crawlers such as GPTBot, ClaudeBot and CCBot, and AI search and assistant fetchers such as ChatGPT-User and PerplexityBot. robots.txt only stops crawlers that respect it, so the tab also gives you a ready-to-copy Cloudflare WAF rule that blocks the same crawlers at the edge, which works even when your pages are served from a full-page cache. Untick any crawler you want to let in. Googlebot, Bingbot, Applebot and DuckDuckBot are never blocked. Off by default.
External services
This plugin connects to the third-party services below. Nothing is sent to a service until you configure it.
Stripe
Stripe processes all payments. The plugin calls the Stripe API (api.stripe.com) when a reader checks out, buys a gift, changes or cancels a subscription, when tax is calculated at checkout, and when an administrator manages subscribers or coupons. It sends the reader’s email address, name, billing and shipping address, the plan and price, and for tax estimates without an address, the reader’s IP address. Checkout pages load Stripe.js from js.stripe.com, which collects card details directly; card numbers never reach your site.
- Terms: https://stripe.com/legal/ssa
- Privacy: https://stripe.com/privacy
PaywallProject Connect hub (paywallproject.com)
Used for all payments made through Connect with Stripe. Before you connect, the plugin asks the hub for the platform fee rate and sends your site URL. When you connect, disconnect, or refresh the connection, it sends your site URL and the connection credentials. While connected, every Stripe API request listed above goes through the hub (https://paywallproject.com/wp-json/ppconnect/v1), which forwards it to Stripe and applies the platform fee. That includes the reader data listed under Stripe.
- Terms: https://www.paywallproject.com/terms-of-service/
- Privacy policy: https://www.paywallproject.com/privacy-policy/
Google reCAPTCHA
Used only when reCAPTCHA is selected as the signup protection. Registration and checkout forms load the reCAPTCHA script from google.com, which collects data about the visitor’s browser. When a form is submitted, the plugin sends the captcha token, your secret key and the visitor’s IP address to Google to verify it.
- Terms: https://policies.google.com/terms
- Privacy: https://policies.google.com/privacy
Cloudflare Turnstile
Used only when Turnstile is selected as the signup protection. Registration and checkout forms load the Turnstile script from challenges.cloudflare.com. When a form is submitted, the plugin sends the Turnstile token, your secret key and the visitor’s IP address to Cloudflare to verify it.
- Terms: https://www.cloudflare.com/website-terms/
- Privacy: https://www.cloudflare.com/privacypolicy/
Slack
Used only when you enter a Slack webhook URL. When a subscriber signs up, renews or cancels, the plugin posts a message with the subscriber’s email address and plan to that webhook.
- Terms: https://slack.com/terms-of-service
- Privacy: https://slack.com/trust/privacy/privacy-policy
Outgoing webhooks (Zapier and others)
Used only when you add a webhook URL. On the subscriber events you select, the plugin posts the event name and subscriber details (email address, name, plan and status) to the URL you entered. The data goes to whichever service owns that URL, under that service’s terms.
Screenshots






Installation
- Upload the plugin files to the
/wp-content/plugins/paywallprojectdirectory, or install the plugin through the WordPress plugins screen. - Activate the plugin through the Plugins screen in WordPress.
- Go to PaywallProject, choose Connect with Stripe, and set up your access settings.
FAQ
-
Does this require Stripe?
-
Yes. Stripe is the supported payment gateway for this version.
-
Is there a fee?
-
Yes. PaywallProject takes a platform fee of 10% of each payment made through Connect with Stripe. Stripe’s own fees apply as well.
-
Where can I get help?
-
Visit paywallproject.com for guides and support, or post in the plugin’s support forum here on WordPress.org.
Reviews
There are no reviews for this plugin.
Contributors & Developers
“PaywallProject” is open source software. The following people have contributed to this plugin.
ContributorsTranslate “PaywallProject” into your language.
Interested in development?
Browse the code, check out the SVN repository, or subscribe to the development log by RSS.
Changelog
4.0.1
- Security: Hardened the 3-D Secure checkout finalization.
- Security: Hardened how REST requests from logged-in members are authenticated.
- Security: Removed the endpoint that revealed whether an email address has an account, and finishing a free signup now requires the verified one-time code.
- Security: Every public route, admin form and database query is now checked, sanitized, prepared and escaped, following the WordPress.org plugin review.
- Fix: The Newsletter Glue “Sync all subscribers” button in Tools no longer crashes.
4.0.0
- Breaking: The
PPACCESS_MANAGED_INSTALLconstant and theppaccess_managed_installandppaccess_offer_own_stripe_keysfilters were removed. Payments now go through Connect with Stripe only. Sites already charging with stored keys keep working. - Feature: AI Shield — a new Settings AI Shield tab, off by default, adds robots.txt rules that turn away AI training crawlers and AI search fetchers while Google, Bing and other search engines keep indexing. Pick the bots one by one, and copy a ready-made Cloudflare WAF rule for pages a CDN cache serves before WordPress sees them. The tab warns when a physical robots.txt file or an SEO plugin’s rules still let a blocked crawler in.
- Feature: Newsletter Glue integration — keep a Newsletter Glue list in step with your subscribers, with their status, access, plan and expiry date as custom fields and ready-made “has access” / “no access” segments. It never unsubscribes anyone, and a Tools card backfills existing subscribers. Readers can also join and leave your newsletters and topics from a new Newsletters card in My Account. Off until you enable it.
- Feature: Coupons can now discount recurring payments — choose the first payment only, a number of months, or every payment. Existing coupons keep discounting the first payment only, and editing a coupon now applies to the next checkout or plan change.
- Feature: A
subscriber.plan_changedwebhook is sent when a subscriber upgrades or downgrades — from the admin, My Account or Stripe — carrying both plans. - Feature: Subscribers can upload, change or remove a profile photo on the My Account page. It becomes their avatar across the site.
- Improvement: Free plans now use the site’s checkout layout, including the standalone checkout, and email domains restrict free plans as well as paid ones. Each restricted plan can say who it is for, such as “Free for Meeker School District staff”.
- Improvement: A post that names a free level can now turn off the free sign-up form on its paywall and show the plans instead. Subscribers on the free level still read it.
- Improvement: The own-key Stripe fields, the webhook setup button and the managed-install mode are gone from Settings; Connect with Stripe is the one way to take payments.
- Improvement: Ready for WordPress.org: the text domain is now
paywallproject, the “Secure checkout powered by Stripe” line is removed, and readme.txt lists every external service the plugin contacts. Tested up to WordPress 7.1. - Security: Content inside the gating shortcodes is now sanitized, paywall container selectors are validated before they reach CSS, and request input, cookies and inline scripts are sanitized and escaped throughout.
- Fix: A subscriber who bought the plan they already held was charged again for the same period. Checkout now refuses it.
- Fix: A Stripe key saved in the wrong mode — a live key in the test slot, for example — is now refused, so a site set to test mode can never charge a real card.
- Fix: Checkout failed for a recurring pay-what-you-want level that had no Stripe product.
- Fix: The coupon field on the stepped checkout no longer sits flush against the fields above it.
Older releases are listed in changelog.txt.
