parentsquare-client
An unofficial, read-only sync and async ParentSquare client for the authenticated ParentSquare web experience.
ParentSquare does not publish a parent-facing API. This project reads the authenticated parent web experience and therefore may stop working when ParentSquare changes its site or account protections. It is not affiliated with or endorsed by ParentSquare, Inc. Review ParentSquare's current terms and your district's policies before using it.
Install the client from PyPI:
pip install parentsquare-client
uv add parentsquare-client
Credential storage is opt-in. Install the keyring extra to use the operating
system's configured credential store:
pip install "parentsquare-client[keyring]"
uv add "parentsquare-client[keyring]"
from parentsquare import KeyringCredentialStore
credentials = KeyringCredentialStore()
credentials.set_password("parent@example.com", "password")
password = credentials.get_password("parent@example.com")
The default client does not read or write the keyring. The embedding application owns its credential storage policy.
Development
Install the development environment with uv sync --extra dev, then run
uv run pytest. Install prek with uvx prek install to enable the same
checks used by CI. Tagged releases create GitHub release artifacts; the
published release workflow uses PyPI Trusted Publishing and can be dispatched
against TestPyPI for a pre-release verification.
See docs/releasing.md for the one-time Trusted Publisher configuration and tag workflow.
from parentsquare import AsyncParentSquareClient
async with AsyncParentSquareClient("parent@example.com", "password") as client:
account = await client.discover_account()
schools = account.schools
students = account.students
posts = await client.fetch_posts(schools[0].id)
events = await client.fetch_calendar_events(schools[0].id)
dashboard = await client.fetch_student_dashboard(students[0])
groups = await client.fetch_groups(schools[0], students=students)
group_posts = await client.fetch_group_posts(schools[0], groups[0])
The synchronous wrapper is useful for scripts and data tools:
from parentsquare import ParentSquareClient
with ParentSquareClient("parent@example.com", "password") as client:
schools = client.discover_schools()
posts = client.fetch_posts(schools[0].id)
The typed models use frozen, slotted dataclasses and expose to_record() for
data tools. get_html(), get_json(), and get_ics() provide an authenticated
read-only escape hatch for upstream pages that have not yet earned a stable
model. There are intentionally no write methods.
IDs are stable within ParentSquare's account and are suitable for downstream
deduplication and merge keys. A student dashboard's grade_level is a school
grade label, not an academic mark. Synthetic fixtures are used in this
repository's tests; real messages, cookies, credentials, student records, and
calendar URLs must never be committed.
Authentication
The client supports the normal sign-in flow and a six-digit MFA challenge. A
caller handles MFARequired by presenting the masked destination to the user
and calling submit_mfa_code. The client does not persist credentials or
cookies; an embedding application owns that storage policy.
Status
This is an early alpha. Parent-visible schools, students, student dashboards,
groups, group feeds, posts, and calendars are typed read operations. When
students are supplied to fetch_groups, linked student IDs are attached to
each group from ParentSquare's authenticated group picker. Less stable
read-only pages can be reached with the raw methods while their models are
developed. Replies, acknowledgements, forms, sign-ups, payments,
attachments, and every write operation remain out of scope for this client.
Metadata
Release files for parentsquare-client 0.2.4
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| parentsquare_client-0.2.4.tar.gz | 106.9 kB | With provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| parentsquare_client-0.2.4-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 124.3 kB
Release files / parentsquare_client-0.2.4.tar.gz
| Download URL | parentsquare_client-0.2.4.tar.gz |
|---|---|
| Size | 106.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
f6ae5851a509a41272a9b076f62d2506c2bc7a18b6cdb1655cc7e5a860c0df10
|
|
BLAKE2b-256 checksum How to use checksums |
0414aafea209a2f4d1e2869822a01dda9a61eb84d59845e6bf6f9d7c04fc1156
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 21, 2026.
Transparency logRelease files / parentsquare_client-0.2.4-py3-none-any.whl
| Download URL | parentsquare_client-0.2.4-py3-none-any.whl |
|---|---|
| Size | 17.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
97deebe3a546a129d9cec4c62a4c771850c9d3c882355714cf489564f8d1b8d0
|
|
BLAKE2b-256 checksum How to use checksums |
95c67f44bd629bc9abf11af648b719ee3c4fa8c31a10fbdaeabf2589b88b1e05
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 21, 2026.
Transparency logSecurity for parentsquare-client 0.2.4
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
All 2 files in this release have been uploaded with provenance metadata.
Attestation for parentsquare_client-0.2.4.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 21, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.