developerpactBoardSDKHow it works
developerpactPrivacyTermsSDKHow it works

How it works

  1. 1

    Register your app

    Name, package name and how many testers you need. About three minutes.

  2. 2

    Add the developerpact SDK

    One dependency and one line in main(). Upload that build to your closed testing track.

  3. 3

    Swap testers

    Developers from the board join your test, install from Play and open your app for a minute a day. You do the same for theirs.

  4. 4

    Apply for production

    The ledger shows who is really testing. Once 12 testers have stayed 14 days, apply to Google with the engagement summary.

Read the details below.

Google Play closed testing

Testing, with proof.

See who tested your app. Day by day, measured on the device rather than promised in a screenshot.

I need testersI’ll test apps
  • No payment, no points
  • About 1 minute a day per app
  • Drop anyone, any time
  • 12 testersWhat Google asks of a personal developer account before production.
  • 14 consecutive daysOpted in without a gap. One opt-out restarts that tester’s count.
  • 60 seconds a dayIn the foreground, measured on the tester’s own phone. That makes a day count.

YourApp · Example

Illustrative data · fictional app and testers · 4 of 16 testers shown

On track 11 / 12 · earliest apply date 6 Nov · buffer +4

  • MeasuredMeasured
  • MissedMissed
  • Today in progressToday in progress
  • UpcomingUpcoming
TesterDay 1Day 2Day 3Day 4Day 5Day 6Day 7Day 8TodayDay 9Day 10Day 11Day 12Day 13Day 14StateInstallLast active
T1Tester 1Tester 1, day 1: countedTester 1, day 2: countedTester 1, day 3: countedTester 1, day 4: countedTester 1, day 5: countedTester 1, day 6: countedTester 1, day 7: countedTester 1, day 8: todayTester 1, day 9: upcomingTester 1, day 10: upcomingTester 1, day 11: upcomingTester 1, day 12: upcomingTester 1, day 13: upcomingTester 1, day 14: upcomingfinePlaytoday
T2Tester 2Tester 2, day 1: countedTester 2, day 2: countedTester 2, day 3: missedTester 2, day 4: countedTester 2, day 5: countedTester 2, day 6: missedTester 2, day 7: countedTester 2, day 8: todayTester 2, day 9: upcomingTester 2, day 10: upcomingTester 2, day 11: upcomingTester 2, day 12: upcomingTester 2, day 13: upcomingTester 2, day 14: upcomingfinePlaytoday
T3Tester 3Tester 3, day 1: countedTester 3, day 2: countedTester 3, day 3: countedTester 3, day 4: countedTester 3, day 5: missedTester 3, day 6: missedTester 3, day 7: missedTester 3, day 8: todayTester 3, day 9: upcomingTester 3, day 10: upcomingTester 3, day 11: upcomingTester 3, day 12: upcomingTester 3, day 13: upcomingTester 3, day 14: upcomingsilentPlay3 days agoDrop
T4Tester 4Tester 4, day 1: missedTester 4, day 2: missedTester 4, day 3: missedTester 4, day 4: missedTester 4, day 5: missedTester 4, day 6: missedTester 4, day 7: missedTester 4, day 8: missedTester 4, day 9: upcomingTester 4, day 10: upcomingTester 4, day 11: upcomingTester 4, day 12: upcomingTester 4, day 13: upcomingTester 4, day 14: upcomingnot countedsideloadednever

Every mark came from the app itself; what a tester says about themselves is shown in grey and never counted as evidence. Silent is 3 local days without a counted day, and it is the owner who drops — the platform never does.

How it works

4 steps, about 15 minutes. Then about 1 minute a day in each app, for as long as the test runs.

  1. 1

    Register your app

    2 minutes

    Package name, how many testers you want, and the rules a tester signs up to. Nothing else.

  2. 2

    Put the reporter in your buildrequired

    10 minutes

    One line in pubspec.yaml and one call in main(), or the two REST calls if you are not on Flutter. Then a closed-track build.

    Without this step nothing can be measured. The site can still show what testers say about themselves, and a self-report is not evidence — which is the thing this page exists to replace.

  3. 3

    Share your link

    1 minute

    One address carries the group, the opt-in and a personal install link. You paste the addresses that come back into your Play tester list; the site tells you which ones are new.

  4. 4

    Watch, drop, replace

    a daily glance

    The ledger names who opened the app today. Drop someone who stopped, and the site hands you replacements the same hour.

You test their app. They test yours.

For as long as they keep testing yours, about 1 minute a day each. Until you have paired with the people waiting on you, you cannot take a new seat. Asking for 16 seats is ~16 apps × 1 min/day × ~17 days ≈ 4.5 h of your own time.

See all apps on the board

Why a count is not enough

Three things are true at once, and together they are why 14 days can be spent and still fail.

  • 12 testers, 14 daysIn a row, before a personal developer account may publish. One opt-out restarts that tester’s run of days.
  • A count, never a namePlay Console shows how many testers are opted in. No screen and no API tells you which of them still opens the app.
  • “Insufficient tester engagement”A documented rejection reason. It does not say who went quiet, and by then the 14 days are spent.

What the reporter does, and does not

Open source, on pub.dev, and short enough to read in one sitting. There is no function in it that accepts data from your app, so there is nothing to leak — what it merges into your manifest, when it sends and what is in each request are quoted on the SDK page.

Sent

  • +Reads the Play install referrer once, to know which tester this install belongs to.
  • +Times how long the app is in the foreground and sends one number a day; 60 seconds of it makes the day count.
  • +Sends one fixed record and no other: a protocol version, your package name, a random install id, the token from their link, which of the two links carried it, the local day, its timezone offset, the foreground seconds, the session count, the build number, the reporter’s version, the Android API level, the package that installed you, the package that started the install and when it was sent. The server rejects any field that is not on that list.

Never sent

  • −No login, no Cloud project, no Play Console permission, no manifest of your own to edit.
  • −No location, no contacts, no advertising id, no screen names, nothing from inside your app.
  • −No traffic at all from an install that did not come through a tester link, and none at all on iOS.

Make testing visible.

Sign in with the Google account your phone uses for Play. Registering an app takes 2 minutes.

Register your app
BoardSDKHow it works

How it works

  1. 1

    Register your app

    Name, package name and how many testers you need. About three minutes.

  2. 2

    Add the developerpact SDK

    One dependency and one line in main(). Upload that build to your closed testing track.

  3. 3

    Swap testers

    Developers from the board join your test, install from Play and open your app for a minute a day. You do the same for theirs.

  4. 4

    Apply for production

    The ledger shows who is really testing. Once 12 testers have stayed 14 days, apply to Google with the engagement summary.

Read the details below.

PrivacyTermsSDKHow it works
Sign in

Make testing visible.

Sign in with the Google account your phone uses for Play. Registering an app takes 2 minutes.

Register your app

Google Play closed testing

Testing, with proof.

See who tested your app. Day by day, measured on the device rather than promised in a screenshot.

I need testersI’ll test apps
  • No payment, no points
  • About 1 minute a day per app
  • Drop anyone, any time
  • 12 testers
What Google asks of a personal developer account before production.
  • 14 consecutive daysOpted in without a gap. One opt-out restarts that tester’s count.
  • 60 seconds a dayIn the foreground, measured on the tester’s own phone. That makes a day count.