Skip to main content

parentsquare-client

CI Prek CodeQL OpenSSF Scorecard PyPI Latest release License

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)

Source distribution for parentsquare-client 0.2.4
File Size Uploaded Provenance
parentsquare_client-0.2.4.tar.gz 106.9 kB With provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for parentsquare-client 0.2.4
File Interpreter ABI Platform
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 log

Release 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 log

Security 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.

Select from 2 files

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 log

A 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.

Release history Release notifications | RSS feed

This release

0.2.4 This release

2 release files Full provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page