iOS feedback SDK

An iOS feedback SDK for the moments generic surveys miss

Add text and voice conversations to a button, screen, completed action, trial cancellation, or subscription cancellation—and preserve the customer’s exact words.

What this workflow actually does

Paydirt is a Swift SDK for product teams that want contextual feedback inside an iOS app without building recording, transcription, conversational follow-ups, retry storage, a form backend, and Slack delivery from scratch.

The useful unit is a conversation, not a rating widget. The app supplies the moment and product context. Paydirt asks the first question, accepts text or voice, generates relevant follow-ups, and saves each accepted turn. When the person finishes, one Slack message contains the raw question-and-answer sequence.

Forms are remotely configurable, while placement remains explicit in the host app. That separation lets a team change prompts without shipping a release but keeps product behavior reviewable in Swift.

A strong fit for

  • Optional in-app product feedback
  • Post-action research such as export or onboarding completion
  • Trial and paid cancellation interviews
  • Teams that want raw answers in Slack and read-only agent access

Not designed to replace

  • Required onboarding or account data collection
  • Transactional forms that must validate structured fields
  • An autonomous system that changes code from customer feedback
  • A substitute for App Store subscription management

From trigger to exact answers

  1. 01

    Choose a real product moment

    Place a named form on a feedback button, after a successful action, on a screen appearance, or behind a custom condition.

  2. 02

    Ask one useful opening question

    A person can type or record an answer. Paydirt uses the actual response to choose the next question.

  3. 03

    Save as the conversation grows

    Each accepted turn is encrypted locally and upserted with a stable response ID, so an unfinished session does not depend on a final Submit tap.

  4. 04

    Deliver once when finished

    Slack receives one completed message with every raw Q/A and input mode. An AI summary is optional and comes after the transcript.

Present a form from ordinary Swift code

The setup flow returns the actual SDK key and form ID. The host app controls exactly when presentation happens and can attach coarse, intentional metadata.

import Paydirt

Paydirt.configure(apiKey: "PUBLIC_PAYDIRT_SDK_KEY", theme: .automatic)

Paydirt.presentForm(
    formId: "FEEDBACK_FORM_ID",
    userId: currentUserId,
    metadata: ["source": "settings_feedback"]
)

What reaches Slack

  • Every question exactly as shown
  • Every transcribed or typed answer exactly as accepted
  • An `I: Audio` or `I: Text` marker per answer
  • Intentional app metadata supplied by the integration
  • Optional AI summary after—not instead of—the transcript

Know the limits

  • Voice requires microphone permission and network access for transcription
  • Paydirt does not infer the right product moment; the app or coding agent must place the trigger
  • Free-form feedback can contain personal data, so consent copy and privacy disclosures still matter
  • The SDK is for iOS 15+ and does not replace structured business-critical forms

Questions developers ask

Can an iOS app use Paydirt without subscriptions?

Yes. Manual feedback forms do not require StoreKit, RevenueCat, or Superwall. Present a form from any confirmed button, screen, action, or custom condition.

Does removing transcript text from device logs break follow-ups?

No. The transcript remains in the conversation state and submission payload. Removing it from diagnostic logs only reduces accidental exposure of customer words.

What happens if the user leaves before finishing?

Paydirt saves accepted turns as encrypted local snapshots and upserts them remotely with a stable response ID. Slack delivery waits until the conversation is completed.

Ship the smallest useful feedback loop

Install one form at a real product moment, send the completed raw conversation to one Slack channel, and verify it in the app before expanding.

Start setup