SaaS Seat Usage Evidence Review avatar

SaaS Seat Usage Evidence Review

Pricing

$0.25 / completed report

Go to Apify Store
SaaS Seat Usage Evidence Review

SaaS Seat Usage Evidence Review

Review supplied SaaS license exports for offboarded accounts, conflicting assignments and inactivity supported by explicit observation coverage. App-scoped opaque IDs, source-linked JSON/CSV/HTML. No account access or deprovisioning.

Pricing

$0.25 / completed report

Rating

0.0

(0)

Developer

Gilad Ronen

Gilad Ronen

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

20 days ago

Last modified

Share

Turn normalized SaaS license exports into a review queue with source references. Compare assigned seats with app-scoped account roster, observed usage and an explicit observation window. Download a complete JSON report, a flat seat evidence CSV, a findings CSV and a standalone HTML report.

Use this for monthly license reviews, offboarding reconciliation and renewal preparation across several applications. You prepare exports you are allowed to process; the Actor requires no Microsoft, Adobe, Zendesk or other account connection. It does not connect to your apps, change access, estimate savings or make employment decisions.

What the report distinguishes

  • Offboarded seat: the supplied roster says an account is offboarded while an exported seat remains assigned. Verify both snapshots before making an access change.
  • Conflicting or duplicate evidence: repeated app/seat assignments and conflicting roster, usage or coverage declarations remain visible. The Actor does not choose a convenient winner or merge conflicting accounts.
  • Candidate inactivity: a known active account has an old enough assignment, full declared observation coverage and either sufficiently old observed activity or an explicit none-observed declaration. This is a candidate for human review.
  • Unknown usage: a missing record or unknown state stays unknown. A blank last-activity cell alone never means unused.
  • Recent assignment or incomplete coverage: delayed reports, narrow windows and newly assigned seats cannot establish a full inactivity period.

Counts refer to supplied assignment records, not unique people. Multiple seats for one app/account are flagged for review; they may be legitimate licenses. No license compliance or optimization certificate is issued.

Prepare input

Set reviewId, asOf and inactivityDays explicitly. All dates use YYYY-MM-DD UTC calendar dates from 1970 onward. Activity age is the difference in UTC calendar days from asOf; equality with the inactivity threshold qualifies for review when every other condition is supported.

Supply arrays with these exact fields:

TableFields
assignmentsappId, seatId, accountId, assignedAt
rosterappId, accountId, status (active or offboarded), offboardedAt (date or null)
activityappId, accountId, state (observed, none-observed, unknown), lastActivityAt (date or null)
coverageappId, from, through, complete (boolean)

Every assignment represents a currently assigned seat in your supplied snapshot. assignments or assignmentsCsv is required; an empty array explicitly declares no assigned seats. Other missing tables or unmatched exact keys leave that evidence unknown.

Use opaque identifiers only. Employee names, emails and extra object fields are rejected. IDs accept 1–96 ASCII letters, digits, dot, underscore, colon, slash and hyphen, starting with a letter or digit. Leading zeros and case are preserved. appId/accountId is an exact pair: an account in one application is not joined to the same-looking account in another. Map identities yourself before uploading; no aliases or case folding are inferred.

observed requires a last-activity date. unknown and none-observed require null. Select none-observed only when your actual export explicitly establishes no recorded activity in that covered period. complete: true asserts that observations include every relevant assigned account and expected activity type for the app during that window. To support a candidate, the window must start no later than the inactivity cutoff and end on asOf. Report delays must be reflected in through; do not mark delayed observations complete through a later date. Assignment must also be no later than the cutoff. Future dates, reversed windows and incompatible state/date combinations are rejected.

Mapped CSV alternative

Each table supports an alternative object named assignmentsCsv, rosterCsv, activityCsv or coverageCsv:

{
"csv": "Application,Seat,Account,Assigned\napp-1,001,acct-1,2026-08-01\n",
"mapping": {
"appId": "Application",
"seatId": "Seat",
"accountId": "Account",
"assignedAt": "Assigned"
}
}

Remove that table's prefilled array before supplying CSV. Do not supply both representations, even an empty array. Map every canonical field, remove other columns and retain exact headers. BOM, quoted cells and CRLF are accepted. Duplicate headers, duplicate mappings and irregular rows fail. Optional dates use blank CSV cells; coverage booleans use literal true or false. JSON array dates use null, never an empty string.

Results and repeat runs

The default dataset contains one complete report with summary, scope, rules, evidence rows and findings. Source references point to original array indices or mapped CSV data rows, with header counted as row 1. Open the original input to inspect conflicting values. CSV downloads neutralize formula-like cells; HTML escapes supplied content and uses no external scripts or resources. Download HTML and open locally.

The prefilled example includes supported candidates, an offboarded seat, unknown activity, a recent assignment, a conflicting seat and separate app-scoped usage. Replace all example records with your normalized batch before using the results operationally.

Price is $0.25 per completed report, with platform usage included. There is no startup or per-row fee. A new run is billable again. Same-run recovery reuses the saved report after verifying input and integrity, restores exports and avoids a second dataset item or report event. Interrupted export writes can leave partial downloads until recovery; they are not billed as a completed report. Apify input and output storage contain your supplied data; use only authorized opaque exports and retain/delete run storage according to your policy.

Input is limited to 4 MB JSON and 5,000 combined records across all tables. Full JSON must stay below 8 MB; every export must stay below 9 MB. Exception-heavy batches can reach output limits before the row limit; split them. Limits are checked before a report event is charged. Default execution is 1024 MB and 180 seconds. No external models or network data fetches are used.