What an account actually holds inside the app
The Play Store listing and the bank's own digital-banking pages line up on the surfaces a logged-in customer sees. Below is the map we work from on day one of the build, before we start naming endpoints. Granularity columns reflect what the app appears to expose to the end user — the precise per-row fields are confirmed against the live portal during the build, not asserted from the listing.
| Surface | Where it originates inside the app | Granularity visible to the user | What a downstream integrator does with it |
|---|---|---|---|
| Account list & balances | Dashboard tile after login | Per account: nickname, masked number, type (DDA / savings / loan), current and available balance, as-of timestamp | Cash-position rollups; treasury sync; balance-threshold alerts in a host app |
| Posted & pending transactions | Per-account "Activity" view, paginated by date | Date, description, amount, sign, running balance; user-added tags, notes and receipt/check images | Categorization, accounting export, reconciliation against vendor invoices |
| Statements | "Statements" tab — monthly PDFs | Statement-cycle PDF per account, typically 12–24 months retained | Bookkeeping ingest; underwriting evidence; archival |
| Transfers & person-to-person payments | "Transfers" and "Pay a person" flows | Source, destination, amount, schedule, state (pending / posted / cancelled) | Cash-flow forecasting; payroll and rent-split tooling |
| Bill pay | "Pay a company" flow with payee directory | Payee record, scheduled and historical payments, status | AP mirror; recurring-payment audit |
| Mobile-deposit submissions | "Deposit a check" flow | Front/back image, amount, hold status, posting outcome | Deposit-pipeline visibility for businesses taking paper checks |
| Card controls | "Cards" panel | Lock/unlock state, travel notice, reorder request, alert thresholds | Lost-card workflow surfaced inside a host app; expense-policy enforcement |
| Branch & ATM locator | Static directory inside the app | Branch and ATM list with addresses | Out-of-network routing for a finance super-app |
Authorized routes into a Peoples Bank account
Three routes are actually on the table for this bank. We pick whichever one the downstream use case needs, sometimes layering two.
1. Consent-routed read of the MyPeoplesMobile portal
The customer logs in, the integration captures the resulting session under documented consent, and the portal contract is walked the way the mobile and web clients walk it — same auth, same endpoints, same shape. This is the route that actually reaches every surface listed above with no missing fields. Effort is moderate; durability is good if maintenance is contracted, because portal pushes on shared community-bank stacks are predictable and adapter-localized.
2. Aggregator hand-off (Plaid, Finicity, MX)
If the downstream product is already wired into one of the major US aggregators, Peoples Bank is reachable through that path — Fiserv's 2023 deal alone brought roughly three thousand community banks and credit unions onto Plaid's API connectivity, and a small Iowa bank typically sits inside that footprint as the long-tail "credential or token" connector. Coverage is narrower than the consented portal read (balances and posted transactions are reliable; statements, deposit images and card controls usually are not), but the integration cost is small. We wire this when "good-enough" balance and transaction data inside a third-party product is the goal.
3. Native customer export
Statements and transaction history can be exported by the account holder from the portal itself. As a continuous integration this is brittle; as a one-shot bulk pull for accounting or for an underwriting file, it is the cleanest path and the one we will sometimes deliver as a small scheduler rather than a live integration.
For most downstream needs — a finance app that wants live balances and a clean transaction stream for a Peoples Bank customer — the consented portal read is the route we would actually pick, with the aggregator hand-off held as the fallback for accounts already linked there. We name the choice in the kickoff note, not in the contract.
A sketch of the call that pulls a statement
The shape below is illustrative — it tracks the pattern small-bank web portals on shared stacks use (cookie session + rotated CSRF + date-windowed activity queries), and we confirm the exact contract against the live portal on day one of the build. It is here so a reader can judge the work, not to be copy-pasted.
# After a consented login (device fingerprint + MFA already cleared),
# the session object carries the bank-issued cookie + the CSRF token
# captured from the post-login bootstrap response.
GET /banking/api/v1/accounts
Cookie: session=<server-issued>
X-CSRF-Token: <captured-on-login>
Accept: application/json
-->
{
"accounts": [
{ "id": "acct_…",
"displayName": "Free Checking …4421",
"type": "DDA",
"currentBalance": 1284.07,
"availableBalance":1240.07,
"asOf": "2026-05-24T14:02:11Z" }
]
}
# Posted-transaction window. The portal paginates by date,
# not by cursor, so the client steps backwards in ~30-day windows
# and de-dupes on (date, amount, descriptor, running-balance).
GET /banking/api/v1/accounts/{acct_id}/transactions
?from=2026-04-24&to=2026-05-24
X-CSRF-Token: <rotated-each-call>
# Failure modes the client is built to absorb:
# 401 -- session aged out; re-run consented login + MFA
# 403 -- CSRF rotation; re-fetch token, retry once
# 429 -- portal throttle; honour Retry-After
# 503 -- core-banking nightly window; back off, surface upstream
# Statement PDFs are pulled separately and stamped with the account
# id + cycle so the downstream system can store them next to the
# normalized transaction rows they correspond to.
What lands in your repository at the end
The output is concrete and small enough that an engineer on the receiving side can read it in an afternoon. For MyPeoplesMobile that means:
- An OpenAPI 3.1 spec covering the endpoints the integration actually calls — accounts, transactions, statements, transfers, bill-pay, mobile-deposit, card-state, ATM directory — with request and response shapes, error codes, and the auth flow drawn out.
- A protocol & auth-flow report: how the consented login is captured, how the session cookie and CSRF token are kept fresh, how MFA prompts are surfaced back to the end user, what the device-fingerprint envelope contains.
- Runnable source in Python and Node.js for the read paths, with the normalization layer that flattens the per-account JSON into one canonical transaction row.
- An automated test suite seeded with recorded fixtures from the live portal so a regression after a vendor push fails loudly, not silently.
- Operator documentation — how to run the integration, what each error means, what to do when MFA shape changes, how to swap in a new consented session.
- A short compliance memo covering the consent record, retention defaults, what is logged, and what is not.
Engineering particulars we account for
A few things about this specific app shape the build, and we name them up front so the cycle does not slip:
- Shared
.gripvendor stack. The package suffix repeats across Peoples Community Mobile (com.peoplescommunitybank.grip) and CBNA Mobile Banking (com.cbna.grip), which strongly suggests a shared whitelabel build. We treat the portal contract as a vendor surface that ships releases platform-wide, isolate it in one adapter layer, and price a small per-release regression run against captured fixtures into the maintenance contract so a vendor push is a patch and not a rebuild. - Date-windowed activity, not cursors. Small-bank portals typically paginate transactions by date range rather than by opaque cursor; the client walks the window backwards and de-dupes on a composite key. We build the windowing and the de-dupe in from day one so an integration that needs 24 months of history does not lose rows at month boundaries.
- MFA shape will change. Community banks on shared mobile stacks adjust MFA prompts (SMS, push, one-time code) more often than their endpoint contracts. The consented-session capture is wired to surface a fresh prompt back to the end user rather than failing the run, and the operator doc covers what to do when the prompt type changes.
- Personal and small-business enrolments are separate. A Peoples Bank customer who runs a small business in Rock Valley or Sioux Center typically holds two separate online-banking IDs; the integration accepts multiple concurrent sessions for one end user and merges the account list at the normalization layer.
- Statement PDFs versus transaction JSON. Bookkeeping pipelines that need both want them stitched. We stamp every statement PDF with the account id and the cycle it covers so the downstream store can join it to the normalized transaction rows without a second pass.
How consent and the US data-rights posture sit today
The basis we rely on is the account holder's own authorization: a documented consent that names the data domains the integration will read, the retention window, who at the downstream organization can see it, and how the consent is revoked. An NDA covers the technical material when the engagement asks for one. Access credentials are arranged with the customer during onboarding; the build runs against the customer's consenting account, never against another party's data.
On the regulatory side, the CFPB's §1033 Personal Financial Data Rights rule — the piece a US reader will ask about — is, as of this writing, not in force. The federal court for the Eastern District of Kentucky enjoined enforcement and stayed the case after the Bureau announced reconsideration; an Advance Notice of Proposed Rulemaking on Personal Financial Data Rights Reconsideration was published on 22 August 2025, and the rule sits open for comment on representative scope, fee assessment and the data-security and privacy threat picture. What that means in practice for a Peoples Bank integration: the consumer's own consented access is the dependable basis today, and §1033 — together with whatever FDX-standard endpoints flow downstream of it to small banks via Fiserv, Jack Henry and the aggregators — is the forward-looking path the integration would migrate onto when it actually lands.
App surfaces, captured from the listing
Other community-bank apps in the same shape
If you are looking at MyPeoplesMobile as part of a wider integration brief, the apps below sit in the same family — small US community banks on shared whitelabel mobile stacks, exposing roughly the same data surfaces to a logged-in account holder. They share the integration pattern even when the package vendor differs.
- PB Iowa Mobile — Peoples Bank of Iowa (a different Peoples Bank, package
com.peoplesbankiowa.mobile); same data surfaces, slightly different mobile stack. - Peoples Community Mobile — Peoples Community Bank, package
com.peoplescommunitybank.grip; shares the.gripnamespace and the same portal contract pattern. - CBNA Mobile Banking — Community Bank N.A., package
com.cbna.grip; the larger sibling on the same vendor stack, useful as a reference point when designing the adapter layer. - Peoples Bank Mobile — Peoples Bank of Marietta, Ohio (
mypeoples.bank); a different bank on a different stack but with the same retail product set. - Peoples Bank Co. Mobile — Peoples Bank Co. of Coldwater, Ohio (
peoplesoa.com); same shape, different vendor. - PB Mobile Banking — Peoples Savings Bank (
mybankpsb.com); a representative of the small-savings-bank long tail. - ibankpeoples Mobile — Peoples Bank, North Carolina; comparable balance and transaction surfaces, different state regulator.
- Peoplesbancorp Mobile — Peoples Bancorp, the larger Marietta-headquartered parent; useful when a downstream product needs to consolidate accounts across that group's footprint.
Names are listed for orientation, not endorsement; nothing here is a ranking.
Questions we get about Peoples Bank integrations
How does the integration handle the 4-digit passcode and biometric unlock MyPeoplesMobile uses?
Passcode and biometric unlock are the local convenience layer on top of the underlying online-banking credentials — the integration authenticates against the bank's server using those underlying credentials and whatever MFA challenge the bank issues, not the device unlock. The end user keeps their passcode and Face ID on the phone; the consented integration only ever sees the session that the server-side login produces.
If the .grip mobile stack updates, does the integration break?
Front-end and endpoint changes on shared-vendor stacks like this one tend to land as platform-wide releases, not bank-by-bank. We isolate the portal contract in one adapter layer, keep a per-release fixture set captured from the live session, and schedule a regression run against those fixtures whenever a vendor push is observed, so a release lands as a small adapter patch rather than a full rebuild.
Can one integration cover both the personal and small-business accounts a customer holds at Peoples Bank?
Yes, but they are usually two distinct online-banking enrolments under the same person, with different IDs and sometimes different MFA postures. The integration enumerates the account list returned per session and is wired to accept multiple concurrent sessions for the same end user when the bank issues separate consumer and business credentials.
What this brief is based on
The Play Store listing for com.peoples_ebank.grip for the app surfaces and minimum OS; the bank's own digital-banking and "Who We Are" pages on peoples-ebank.com for the institution profile, branch list and 1945 charter; the CFPB's Personal Financial Data Rights Reconsideration docket and the Federal Register entry of 22 August 2025 for §1033 status; the FDX standard-setting recognition by the CFPB for the open-banking trajectory; and the small-bank screen-scraping-versus-API coverage in Banking Dive and American Banker for the aggregator landscape that Peoples Bank sits inside.
Specific deep links checked:
- MyPeoplesMobile on Google Play
- Peoples Bank — online and mobile banking
- CFPB — Personal Financial Data Rights Reconsideration
- CFPB — recognition of FDX as standard-setting body
OpenBanking Studio integration desk · mapping reviewed 2026-05-24.
From $300 the source-code delivery is yours, paid after delivery once you are satisfied — the OpenAPI spec, the protocol and auth-flow report, the runnable Python and Node.js source, the recorded-fixture test suite and the operator docs land in your repository. If you would rather not host the integration at all, you call our endpoints for the same data on a pay-per-call basis with no upfront fee, and we carry the maintenance. The cycle is one to two weeks either way. Tell us what you need from MyPeoplesMobile and we will come back with a route and a number.
App profile (collapsed)
Name: MyPeoplesMobile. Publisher: Peoples Bank (NW Iowa, SW Minnesota, SE South Dakota), an FDIC-insured community bank chartered in Iowa in 1945, with ten branches across the three-state footprint per its own "Who We Are" page. Package: com.peoples_ebank.grip on Google Play; also published on the App Store under the MyPeoplesMobile name. Minimum OS: per the bank's digital-banking guidance, iOS 18.4 or newer and Android 10.0 or newer. What it does: consumer and small-business mobile banking — account balances and activity, transfers, person-to-person payments, bill pay, mobile-deposit, monthly statements, debit-card lock/unlock and travel notices, balance and transaction alerts, branch and ATM locator. Authentication: online-banking credentials with 4-digit passcode or biometric unlock on supported devices. The app is referenced here for the purpose of describing how a consent-routed integration of its data is built; OpenBanking Studio is independent of Peoples Bank.