Recipe: Set up Claim Listing subscriptions

Goal

Let an app user claim a listing and pay for a subscription that is owned natively by GeoDirectory — so claiming, upgrading, downgrading, and cancelling all behave the same whether the user is on the web or in the app.

A claim purchase creates a native GeoDirectory pricing subscription. The money is collected by one of two rails you choose per app:

  • Stripe — charged through the customer’s saved card (MAM Stripe).
  • In-App Purchase (IAP) — charged by the App Store / Google Play.

This recipe covers everything you set in WordPress to make either rail work, plus the optional approval flow, the claim screen appearance, and the notifications.

Looking for how it works under the hood? See Form and flow: Claim Listing.


Prerequisites

  • The third-party GeoDirectory Claim Listing add-on is active. (Without it the claim button never appears.)
  • The third-party GeoDirectory Pricing Manager add-on is active, with its Cart set to “Invoicing” (GetPaid). This is what creates and owns the recurring subscription. (GeoDirectory → Settings → Pricing Manager → Cart.)
  • The GetPaid / Invoicing plugin is active.
  • For the Stripe rail: MAM Stripe Manager active and connected.
  • For the IAP rail: MAM In-App Purchase Manager active, plus WooCommerce (it stores the IAP products).

Step 1 — Turn on claiming for the post type

Claiming is a GeoDirectory setting, not a MAM one. In GeoDirectory → Settings → Post Types → (your post type) → Claim, make sure claiming is enabled and the “Claimed” custom field is active for that post type. If the “Claimed” field is inactive, the claim button will not show on any listing of that type.


Step 2 — Create your claim packages

In GeoDirectory → Settings → Pricing Manager → Packages, create one package per tier you want to sell for the claimable post type (e.g. Monthly, Yearly).

For each package:

  • Set the price and the recurring terms (interval + time unit). The interval label shown on the claim screen (e.g. “per month”) is derived from this.
  • The package’s WooCommerce product (woocommerce_product_id) is used as the product reference sent to the app. This is required for the IAP rail (the product’s SKU is the store product identifier) and harmless for Stripe.

If you plan to use the approval flow (Step 4), you must also create one free package (price 0) for the post type. Approved users are granted this free tier and upgrade later in the app.


Step 3 — Choose the checkout rail

On Mobile App Manager → Geodirectory → Claim Listing, set Checkout mode:

  • Stripe — the app collects the card and charges through MAM Stripe.
  • In-App Purchase — the app sends the user to the App Store / Play purchase sheet.

This is a per-app choice — the whole app uses one rail or the other; you cannot mix per package.

If you choose In-App Purchase but the MAM In-App Purchase Manager plugin is not active, the page shows a warning. Activate it before going live.

Extra setup for the In-App Purchase rail

  1. For each claim package’s WooCommerce product, tick the “In App Purchase” checkbox (added to the product editor by MAM In-App Purchase Manager) and give it a SKU and a Duration attribute that matches the package’s recurring period.
  2. Create the matching auto-renewable subscription products in App Store Connect and Google Play, using product identifiers that equal those SKUs. (Google uses the SKU with underscores swapped for hyphens.)
  3. Add sandbox / license testers for your test pass.

The App Store / Google Play own the renewal billing. MAM never charges an IAP subscription — it records the purchase and mirrors the store’s state. See Form and flow: Claim Listing for the lifecycle.


Step 4 — (Optional) Require admin approval

On Mobile App Manager → Geodirectory → Claim Listing, set Require admin approval to claim?

  • No — the button reads Claim Listing and goes straight to purchase.
  • Yes — the button reads Request to Claim. The user submits a request, you review it, and on approval they own the listing at the free tier (then upgrade in-app).

Approval mode requires a free package (Step 2). If none exists for the post type, the app safely falls back to direct purchase regardless of this toggle.

Approvals and rejections are handled in GeoDirectory’s own Claims dashboard (where pending claims list with Approve / Reject). You don’t need a separate MAM screen.


Step 5 — Style the claim screen

Still on Mobile App Manager → Geodirectory → Claim Listing, set the appearance values that are sent to the native claim screen:

Setting Controls
Call-to-action text The headline above the packages
Claim features A bulleted benefits list (one per line)
Background image / Background color The screen background
CTA text color The headline color
Package background / text color The package cards
Price color The price text
Button background / text color The “Select” buttons

Empty values fall back to the app’s built-in defaults.


Step 6 — Configure the notification templates

The claim flow sends notifications. Set their title/body templates under your MAM notification settings (the general settings tab). Available placeholders are shown in GeoDirectory notification types.

Notification Sent to When
Listing Claimed All admins A listing is claimed/approved (any rail, app or web)
Claim Requested All admins A user submits a “Request to Claim”
Claim Request Approved The claimant An admin approves their request
Claim Request Rejected The claimant An admin rejects their request
Claim Subscription Lapsed All admins An IAP subscription lapses and there’s no free tier to fall back to

Step 7 — Verify

  1. As a non-author, signed-in app user, open a claimable, unclaimed listing of the configured post type. The claim button should appear.
  2. Direct purchase: tap Claim Listing, pick a package, complete payment. Confirm in WordPress that you are now the listing’s author, the listing shows as claimed, and a pricing subscription exists.
  3. Approval mode: tap Request to Claim. Confirm a pending claim appears in the GeoDirectory Claims dashboard and admins receive the “Claim Requested” notification. Approve it; confirm the user becomes the owner at the free tier and receives the “Approved” notification.
  4. IAP rail: complete a sandbox purchase and confirm the claim completes the same way as Stripe.

Troubleshooting

Symptom Likely cause
Claim button never appears Claiming/Claimed field not enabled for the post type (Step 1), or the Claim add-on is inactive.
“Could not create the claim invoice…” Pricing Manager Cart is not set to Invoicing (GetPaid), or the package isn’t a valid claim package.
“No GetPaid invoice was created…” Same as above — the Invoicing cart isn’t active.
“Payment gateway not available” The matching gateway didn’t load — confirm GetPaid is active (Stripe rail) or MAM In-App Purchase Manager is active (IAP rail).
“No saved payment method” (Stripe) The user hasn’t added a card.
Approval toggle seems ignored No free package exists for the post type, so it falls back to direct purchase (Step 4).

  • Form and flow: Claim Listing — theory of operation
  • Recipe: Configure the GeoDirectory settings page
  • Recipe: Pricing package fields
  • Integration: In-App Purchase Manager
  • GeoDirectory notification types

Metadata

Field Value
Article type Recipe (Admin)
Plugin slug mam-geodirectory
Applies to plugin version 26.26.0+
Category Building Your App
Audience WordPress admin
Estimated time 30–45 minutes
Contents

    Need Support?

    Can't find the answer you're looking for? Don't worry we're here to help!