isc-reporter
Excel dashboards and PDF reports for SailPoint Identity Security Cloud (ISC), from the command line.
isc-reporter turns what ISC knows into reports people can read: workbooks with KPI tiles,
native Excel charts and filterable tables, and matching PDF files to send around.
| Command | What you get |
|---|---|
search |
Any search (identities, access profiles, roles, entitlements, events, account activities, workflows) with one line per object: an identity's roles, access profiles, entitlements and accounts are consolidated instead of repeated on many lines. |
campaigns |
Certification campaign dashboard: progress, approved / revoked / pending decisions by access type, reviewer workload, overdue certifications, and every reviewed item for audit evidence. |
changes |
Identity attribute changes with old and new values over a period (e.g. department and manager changes of the last 30 days), which ISC search cannot show. |
profiles |
How every identity attribute is built, profile by profile: source, account attribute, transforms, a plain-language explanation, and checks for likely mistakes. |
migration |
Impact analysis for replacing a source (typically a new HR system): impacted identity profiles, transforms and attribute mappings, before/after, and draft JSON for the new objects. |
Read-only: isc-reporter only reads from your tenant. It never creates, changes or deletes
anything; the migration analysis writes its drafts to local files for you to review.
isc-reporter is a community project. It is not affiliated with, endorsed or supported by SailPoint Technologies. SailPoint and Identity Security Cloud are trademarks of SailPoint Technologies, Inc.
Install
Python 3.10 or later.
pip install isc-reporter
Or from a clone of this repository: pip install .
Try it without a tenant
isc-reporter demo
writes every report, built from fictional data, to outputs/demo/.
Connect to your tenant
Create a personal access token for a user who can read what you want to report on, then either set environment variables:
export SAIL_BASE_URL="https://<tenant>.api.identitynow.com" # Windows PowerShell: $env:SAIL_BASE_URL = "..."
export SAIL_CLIENT_ID="<client id>"
export SAIL_CLIENT_SECRET="<client secret>"
or create a config.json in the folder you run from (or pass --config path/to/file.json):
{
"BaseURL": "https://<tenant>.api.identitynow.com",
"ClientId": "<client id>",
"ClientSecret": "<client secret>"
}
The token needs read access to what each command uses: search (sp:search:read) for search
and changes, identity history (idn:identity-history:read) for changes, certification
campaigns and certifications for campaigns, identity profiles, transforms and identity
attributes for profiles, and sources for migration.
Reports
Every command writes to outputs/ (change with --output-dir, or name the file with -o),
logs to logs/, and accepts --format xlsx pdf (plus csv where it makes sense).
Search reports
isc-reporter types # available report types
isc-reporter search identities
isc-reporter search identities -q "attributes.department:Finance" --expand access
isc-reporter search entitlements -q "privileged:true" --format xlsx csv
isc-reporter search events -q "status:FAILED AND created:[now-7d TO now]"
isc-reporter search identities --columns displayName,email,attributes.location --group-by attributes.location
| Type | One line per | Consolidated into the line | --expand (one line per item) |
|---|---|---|---|
identities |
identity | roles, access profiles, entitlements, accounts (list + count) | access, accounts, apps |
access-profiles |
access profile | entitlements | entitlements |
roles |
role | access profiles, entitlements | access-profiles |
entitlements |
entitlement | ||
events |
event | ||
account-activities |
activity | account requests | account-requests |
workflows |
workflow execution |
The workbook has a Summary (key figures and a chart per breakdown), the Data as an Excel
table, a Detail sheet with --expand, and the Query used. Any other search index works too,
with columns chosen automatically or with --columns. Reports can be saved as JSON and shared:
see examples/reports/ and --definition.
Certification campaigns
isc-reporter campaigns # every campaign
isc-reporter campaigns --status ACTIVE
isc-reporter campaigns --since 2026-01-01 --items # with every reviewed access item
isc-reporter campaigns --campaign "Q3 Manager Certification" --format pdf
Sheets: Dashboard, Campaigns (progress bars, revocation rate, days left), Certifications
(one per reviewer), Reviewers (workload, most pending first), with --items Identities
(access grouped by decision) and Decisions (every item with its reviewer comment), and
Filters. Overdue items are shown in red. Role composition campaigns are listed with their
progress but have no reviewer detail (their reviews are not identity certifications).
Identity attribute changes
isc-reporter changes --attributes department,manager --days 30 --format xlsx pdf csv
isc-reporter changes --since 2026-10-01 -q "attributes.cloudLifecycleState:active"
isc-reporter changes --exclude someDailyAttribute
ISC search does not keep previous attribute values, so this report finds the identities modified
in the period and reads their history. By identity gives one line per identity with
Old <attribute> / New <attribute> columns; Changes lists every change. Manager ids are
shown as names. Attributes that change on most days (typically computed from today's date by a
transform) are flagged, as they fire an attribute change event every day. One history call is
made per modified identity: narrow large tenants with --query or --max-identities.
Identity profile mappings
isc-reporter profiles
isc-reporter profiles --profile Employees --profile Contractors
isc-reporter profiles --from exports/ # offline, from exported JSON
One sheet per profile with, for every identity attribute, the mapping kind, a plain-language
explanation ("Value of 'hireDate' from HR System, converted by the transform 'Date to ISO8601'
(changes a date format)"), sources, transforms and the definition. Also: a matrix comparing
profiles, attribute coverage, the transforms used, and checks: required or common attributes not
mapped, missing transforms, lifecycle state copied as is, identical mappings, other sources.
--from reads a profile, a list of profiles or a configuration export, with transforms found in
the same files.
Source migration analysis
isc-reporter migration --old-source "HR System" --new-source "New HR"
# complete outputs/source-migration_<ts>/attribute-mapping.csv, then:
isc-reporter migration --old-source "HR System" --new-source "New HR" --attribute-map attribute-mapping.csv
Finds the identity profiles authoritative on or reading the old source, the transforms reading
it and those calling them, matches each old account attribute to the new source (mapping file,
or same name in the new account schema), shows every mapping before and after, and writes draft
JSON for the new identity profiles and transforms. Transforms are copied with a suffix so both
sources can run in parallel (--in-place to update them instead). Lifecycle states, account
correlation, provisioning policies and workflows are listed as next steps, not analysed.
Privacy
Reports contain personal data (names, emails, access). The default .gitignore keeps
outputs/, logs/, spreadsheets, PDFs and config.json out of version control; handle the
reports under your organisation's data protection rules, and never attach real reports to
public issues.
Development
python -m venv .venv && . .venv/bin/activate # Windows: .venv\Scripts\activate
pip install -e ".[dev]"
pytest
ruff check src tests
Tests need no tenant: the SDK is replaced by recording fakes and the real SDK models are used to check what would be read. See CONTRIBUTING.md.
License
Metadata
Release files for isc-reporter 0.1.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 | Actions |
|---|---|---|---|---|
| isc_reporter-0.1.0.tar.gz | 80.9 kB | With provenance | Details for isc_reporter-0.1.0.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| isc_reporter-0.1.0-py3-none-any.whl | Python 3 | none | any | Details for isc_reporter-0.1.0-py3-none-any.whl |
Total release size: 151.4 kB
Release files / isc_reporter-0.1.0.tar.gz
| Download URL | isc_reporter-0.1.0.tar.gz |
|---|---|
| Size | 80.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
f8371a1f076cda0848df53facc6d73eea0da4dba288eb78a0ab091e1feb3bd69
|
|
BLAKE2b-256 checksum How to use checksums |
28d2c6573d233772eb684b8d4f601d7be6588856a47194c812797d1c6c625c03
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
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 27, 2026.
Transparency logRelease files / isc_reporter-0.1.0-py3-none-any.whl
| Download URL | isc_reporter-0.1.0-py3-none-any.whl |
|---|---|
| Size | 70.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
28de8349f90e68fbc897a6ad40e3747c27688cbefd5001e375d0ac7c1e5e1dd1
|
|
BLAKE2b-256 checksum How to use checksums |
74fc9eb66bafaa398147e6212e08482080bd66bc3679d35dabffa81c7f3bf456
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
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 27, 2026.
Transparency logSecurity for isc-reporter 0.1.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 isc_reporter-0.1.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 27, 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.