dlt-parentsquare
An unofficial, read-only dlt source for ParentSquare
posts and calendar events. The reusable HTTP client lives in the separate
parentsquare-client
repository so applications can use it without installing dlt.
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 dlt adapter:
pip install "dlt-parentsquare[dlt]"
uv add "dlt-parentsquare[dlt]"
Configure the source through dlt's providers. For a local pipeline, copy
.dlt/secrets.toml.example to .dlt/secrets.toml and fill in the ParentSquare
credentials. Keep that file out of version control:
[sources.parentsquare]
username = "parent@example.com"
password = "replace-me"
The same values can be supplied as SOURCES__PARENTSQUARE__USERNAME and
SOURCES__PARENTSQUARE__PASSWORD environment variables. A nonsecret
base_url option may go in .dlt/config.toml or
SOURCES__PARENTSQUARE__BASE_URL. See configuration
for the provider layout and MFA guidance.
Then run the source:
import dlt
from dlt_parentsquare import parentsquare
pipeline = dlt.pipeline("parentsquare", destination="duckdb", dataset_name="school")
pipeline.run(parentsquare())
The source exposes posts, group_posts, and calendar_events by default.
posts contains school-feed posts. group_posts contains the corresponding
group feeds and uses a feed-scoped source_id (school:<id>:group:<id>:post:<id>)
so a post visible in both feeds is not collapsed during a merge. Parent-visible
schools, students, student_dashboards, groups, and school_features
resources are available with parentsquare(include_context=True). Context
resources are opt-in because they contain household and school-directory data.
IDs are stable within ParentSquare's account and are used as merge keys. Each
group record includes student_ids; join those values to students.id to
attach a group to the linked student names without copying names into every
group row. The same relationship can be used to filter a downstream school or
group view. A local DuckDB example is in examples/duckdb_pipeline.py.
Synthetic fixtures are used in tests; real messages, cookies, credentials,
student records, and calendar URLs must never be committed.
The pages argument controls the bounded number of pages read from each
school and group feed, for example parentsquare(pages=3). ParentSquare does
not expose a stable cursor, so each run deliberately re-reads the selected
page window and merges edited records.
The resources use merge with stable IDs because the ParentSquare web
interface does not expose a reliable updated-at cursor. Each run re-reads the
bounded feed and lets dlt merge edited records without losing changes. This is
deliberate: adding a timestamp cursor here could skip an edited post.
Authentication
The shared client supports the normal sign-in flow and a six-digit MFA
challenge. An embedding application handles MFARequired by presenting the
masked destination and calling submit_mfa_code. The client does not persist
credentials or cookies; the embedding application owns that storage policy.
Status
This is an early alpha. Reads only are implemented. Replies, acknowledgements, forms, sign-ups, payments, attachments, and action extraction are deliberately out of scope.
Development
Run uv run --extra dev --extra dlt pytest for the test suite. Install prek
with uvx prek install to run the same checks as CI. Tagged releases create
GitHub release artifacts, and the publish workflow supports PyPI Trusted
Publishing plus manual TestPyPI verification.
See docs/releasing.md for the one-time Trusted Publisher configuration and tag workflow.
Metadata
Release files for dlt-parentsquare 0.3.0
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 | |
|---|---|---|---|---|
| dlt_parentsquare-0.3.0.tar.gz | 130.4 kB | With provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| dlt_parentsquare-0.3.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 137.3 kB
Release files / dlt_parentsquare-0.3.0.tar.gz
| Download URL | dlt_parentsquare-0.3.0.tar.gz |
|---|---|
| Size | 130.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
74e516f2f803e238e2f8cb9ae2cca9892328b21a542e5f1e15eac3837a1353cb
|
|
BLAKE2b-256 checksum How to use checksums |
5f581e2bebf6489ff8d9899e31b3fe922ea968e911cce3667e63b63931af7dac
|
| 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 / dlt_parentsquare-0.3.0-py3-none-any.whl
| Download URL | dlt_parentsquare-0.3.0-py3-none-any.whl |
|---|---|
| Size | 7.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
08536b5c6991cc61fa4ab2c99e2af0646d06cf7044d52ded4418730a1bfd3af5
|
|
BLAKE2b-256 checksum How to use checksums |
b195f6fb93e70ec7869895a822efbfb21eed127fd40e6aaf3c9a29929ce05ace
|
| 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 dlt-parentsquare 0.3.0
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 dlt_parentsquare-0.3.0.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.