Follow software distribution activity across mapped packages, containers and providers using cleaned and adjusted artifact-level series.
Source-native measures, stable artifact identities and separate cleaned/adjusted values preserve analytical context. Aggregate/version reconciliation checks support consistent activity totals.
Coverage and source collection
SoftwareIQ collects source-native activity from five public developer ecosystems on a daily operating schedule.
Current coverage includes npm and PyPI packages, Docker Hub repositories, NuGet packages, and Terraform Registry providers. Source-native artifact identifiers connect each observation to its ecosystem's reported distribution activity.
Source lineage records connect each series to its artifact and observation period. Normalization checks source continuity, while separate cleaned and adjusted values preserve the context behind changes in activity.
Projects, artifacts, and company mappings
The dataset retains source-level identity while supporting project- and company-level analysis.
An artifact is the source-native package, repository, or provider that produces an observation. A project is a maintained analytical entity that groups related artifacts representing the same software project or product family. A project can contain artifacts from more than one ecosystem.
A company association links a project to a covered company for analytical attribution. The mapping is researched and maintained separately from the source metric. It supports company and category aggregation, but it does not by itself assert legal ownership, exclusivity, commercial terms, or the share of activity attributable to paid use.
Project-level analysis does not require every mapped artifact to be added together. Some product-facing packages are independently adopted; others are shared dependencies installed mechanically with another package. Project membership alone does not establish that artifact counts are additive.
- Use the source and artifact identifier to audit or reproduce an individual series.
- Use the project identifier to combine related artifacts only when project-level analysis is intended.
- Use the stable company identifier for cross-dataset joins; ticker and display name are descriptive attributes.
- Company and category aggregates inherit the coverage boundaries of the mapped artifacts included on each date.
Metric definitions and time grain
Daily flows and cumulative snapshots are different measure types and require different aggregation rules.
| Ecosystem | Observed object | Collection input | Delivered measure and grain | Definition and use |
|---|---|---|---|---|
| npm | Package | Downloads during a calendar day | Daily interval | Observed package-distribution activity for the stated day. Values are flows and can be summed across non-overlapping dates. |
| PyPI | Package | Downloads during a calendar day, excluding mirrors | Daily interval | Observed Python package-distribution activity for the stated day. Values are flows and can be summed across non-overlapping dates. |
| Docker Hub | Repository | Total pulls reported by the source | Daily interval derived from cumulative counter | Daily activity derived from changes in the cumulative source counter, subject to continuity and reset controls. |
| NuGet | Package | Total downloads reported for the exact package ID | Daily interval derived from cumulative counter | A cumulative source counter for the identified package; published activity measures changes in that counter. |
| Terraform Registry | Provider | Total downloads across the provider's published versions | Daily interval derived from cumulative counter | Daily activity derived from changes in the cumulative provider counter, calculated from source version totals. |
Published daily series represent interval activity. npm and PyPI provide daily activity inputs; Docker Hub, NuGet and Terraform activity is derived from changes in cumulative source counters. The source measures above describe collection inputs; delivered activity tables contain interval values.
The observation date describes the source period or snapshot date; the retrieval timestamp describes when SoftwareIQ collected it. Missing observations remain missing. They are not converted to zero and should not be bridged automatically when calculating changes.
Compare activity within the same ecosystem and metric. Package downloads, container pulls and provider downloads are different units and must not be added together.
Published values and quality controls
Published activity uses consistent identities, periods and units, with a separate event-adjusted aggregate view.
| Level | Definition |
|---|---|
| Cleaned activity (value) | Published interval activity in source units, including estimates where applicable. |
| Event-adjusted aggregate (adjusted_value) | Aggregate activity after published event adjustments; falls back to cleaned activity where no adjustment differs. Version rows omit this field. |
Quality controls check source identity, continuity and consistency before publication.
Source counter resets are not negative activity. Missing values remain distinct from measured zero activity.
- Valid zero: the source produced a defensible observation whose measured activity is zero.
- Unavailable: activity is unknown for the artifact and period.
- Inactive artifact: an artifact outside the current active coverage set; its history remains distinct from current activity.
- Adjusted value: the event-adjusted aggregate view, delivered alongside cleaned aggregate activity.
Daily npm version activity is estimated. Reconstructed recovery intervals are also estimates. Cleaned activity can include these estimates; the adjusted view is not an estimate indicator.
Version observations
Version series describe known activity for exact software-version identities.
Version activity is supported for npm, PyPI, NuGet and Terraform where published. Docker Hub supplies aggregate activity only. Version metadata provides the exact version label, membership kind and first/last observation dates. Observation dates are not release dates; release dates and release-channel classifications are not delivered fields.
Version membership is sparse. An absent point is unknown, not zero. Preserve named, other and unattributed members. Compare version activity with cleaned aggregate activity over compatible known coverage; version rows never carry aggregate event adjustments. An initial version week can be partial.
Daily history is up to 730 calendar days where supported. Stored weekly history can extend further. Maintained history incorporates corrections; retain dated extracts and publication identities for reproducible research.
Daily and weekly fact tables
Four delivered tables separate aggregate and software-version activity at daily and weekly grains.
value is cleaned interval activity, which can include estimates. Aggregate adjusted_value is a separate event-adjusted view and falls back to value where no adjustment differs. Raw source responses and cumulative counters are outside these fact tables. No per-point estimation flag is delivered.
adoption_daily
Grain: One aggregate activity point per artifact and day. Primary key: point_id.
| Field | Logical type | Nullable | Definition |
|---|---|---|---|
| point_id | STRING | No | Stable adoption observation identity from artifact, optional version, grain and period end; shared with the logical MCP projection. |
| company_id | STRING | Yes | Canonical SoftwareIQ company join key. Resolve through companies; a ticker is not a stable replacement. |
| product_id | STRING | Yes | Canonical product identity (offeringId) the artifact belongs to. Product dictionaries are additional MCP resources, not current bulk tables. |
| artifact_id | STRING | Yes | Canonical package/container/provider artifact identity; source/entity_id/metric describe it in the bulk fact. |
| source | STRING | Yes | Adoption ecosystem: npm, pypi, nuget, docker or terraform. Unlike ecosystems have unlike units. |
| entity_id | STRING | Yes | Exact source package/container/provider identity. |
| metric | STRING | Yes | Source-native activity measure; downloads/pulls/provider activity are not users, seats or revenue. |
| period_start | DATE | Yes | Inclusive economic period start date. Job API date filters select this field. |
| period_end | DATE | Yes | Inclusive economic period end date. Adoption API date filters select this field. |
| value | decimal256(76,38) | Yes | KPI resolved value in the stated unit; adoption cleaned activity in its source-native measure. Preserve null and exact bulk decimal representation. |
| adjusted_value | decimal256(76,38) | Yes | Aggregate activity after published event adjustments, falling back to cleaned value where no adjustment differs; null remains unknown. |
adoption_weekly
Grain: One aggregate activity point per artifact and complete Monday–Sunday week. Primary key: point_id.
| Field | Logical type | Nullable | Definition |
|---|---|---|---|
| point_id | STRING | No | Stable adoption observation identity from artifact, optional version, grain and period end; shared with the logical MCP projection. |
| company_id | STRING | Yes | Canonical SoftwareIQ company join key. Resolve through companies; a ticker is not a stable replacement. |
| product_id | STRING | Yes | Canonical product identity (offeringId) the artifact belongs to. Product dictionaries are additional MCP resources, not current bulk tables. |
| artifact_id | STRING | Yes | Canonical package/container/provider artifact identity; source/entity_id/metric describe it in the bulk fact. |
| source | STRING | Yes | Adoption ecosystem: npm, pypi, nuget, docker or terraform. Unlike ecosystems have unlike units. |
| entity_id | STRING | Yes | Exact source package/container/provider identity. |
| metric | STRING | Yes | Source-native activity measure; downloads/pulls/provider activity are not users, seats or revenue. |
| period_start | DATE | Yes | Inclusive economic period start date. Job API date filters select this field. |
| period_end | DATE | Yes | Inclusive economic period end date. Adoption API date filters select this field. |
| value | decimal256(76,38) | Yes | KPI resolved value in the stated unit; adoption cleaned activity in its source-native measure. Preserve null and exact bulk decimal representation. |
| adjusted_value | decimal256(76,38) | Yes | Aggregate activity after published event adjustments, falling back to cleaned value where no adjustment differs; null remains unknown. |
adoption_versions_daily
Grain: One known activity point per artifact, software version and day. Primary key: point_id.
| Field | Logical type | Nullable | Definition |
|---|---|---|---|
| point_id | STRING | No | Stable adoption observation identity from artifact, optional version, grain and period end; shared with the logical MCP projection. |
| company_id | STRING | Yes | Canonical SoftwareIQ company join key. Resolve through companies; a ticker is not a stable replacement. |
| product_id | STRING | Yes | Canonical product identity (offeringId) the artifact belongs to. Product dictionaries are additional MCP resources, not current bulk tables. |
| artifact_id | STRING | Yes | Canonical package/container/provider artifact identity; source/entity_id/metric describe it in the bulk fact. |
| source | STRING | Yes | Adoption ecosystem: npm, pypi, nuget, docker or terraform. Unlike ecosystems have unlike units. |
| entity_id | STRING | Yes | Exact source package/container/provider identity. |
| metric | STRING | Yes | Source-native activity measure; downloads/pulls/provider activity are not users, seats or revenue. |
| period_start | DATE | Yes | Inclusive economic period start date. Job API date filters select this field. |
| period_end | DATE | Yes | Inclusive economic period end date. Adoption API date filters select this field. |
| value | decimal256(76,38) | Yes | KPI resolved value in the stated unit; adoption cleaned activity in its source-native measure. Preserve null and exact bulk decimal representation. |
| version_id | STRING | Yes | Canonical software-version identity within an artifact. |
| version | STRING | Yes | Exact version label, including residual/synthetic labels. |
| kind | STRING | Yes | Version membership kind: named, other or unattributed. Preserve residual members; membership is bounded and sparse. |
adoption_versions_weekly
Grain: One known activity point per artifact, software version and Monday–Sunday week; initial coverage can be partial. Primary key: point_id.
| Field | Logical type | Nullable | Definition |
|---|---|---|---|
| point_id | STRING | No | Stable adoption observation identity from artifact, optional version, grain and period end; shared with the logical MCP projection. |
| company_id | STRING | Yes | Canonical SoftwareIQ company join key. Resolve through companies; a ticker is not a stable replacement. |
| product_id | STRING | Yes | Canonical product identity (offeringId) the artifact belongs to. Product dictionaries are additional MCP resources, not current bulk tables. |
| artifact_id | STRING | Yes | Canonical package/container/provider artifact identity; source/entity_id/metric describe it in the bulk fact. |
| source | STRING | Yes | Adoption ecosystem: npm, pypi, nuget, docker or terraform. Unlike ecosystems have unlike units. |
| entity_id | STRING | Yes | Exact source package/container/provider identity. |
| metric | STRING | Yes | Source-native activity measure; downloads/pulls/provider activity are not users, seats or revenue. |
| period_start | DATE | Yes | Inclusive economic period start date. Job API date filters select this field. |
| period_end | DATE | Yes | Inclusive economic period end date. Adoption API date filters select this field. |
| value | decimal256(76,38) | Yes | KPI resolved value in the stated unit; adoption cleaned activity in its source-native measure. Preserve null and exact bulk decimal representation. |
| version_id | STRING | Yes | Canonical software-version identity within an artifact. |
| version | STRING | Yes | Exact version label, including residual/synthetic labels. |
| kind | STRING | Yes | Version membership kind: named, other or unattributed. Preserve residual members; membership is bounded and sparse. |
Nullability describes the physical bulk transport schema; semantic constraints also apply. Aggregate gaps remain null. Version membership is sparse and absence is unknown. API/MCP activity uses JSON numbers; bulk Parquet preserves decimal256(76,38) and CSV preserves exact decimal text.
Bulk includes companies, company_dataset_coverage and dataset_catalog reference tables. Extended project, artifact, version and event dictionaries are separately available through entitled API/MCP resources.
Adoption Signals are available programmatically through MCP, including daily and weekly activity, project and artifact mappings, version histories, and events. S3 bulk delivery uses the listed fact and reference tables. Snowflake provisioning is discussed separately by arrangement.
Review the Adoption Signals bulk tables and loading reference.
MCP setup and agent access · Discuss bulk delivery
Research interpretation
Adoption Signals reveal how software distribution activity evolves across mapped artifacts, versions and ecosystems.
Package downloads, container pulls, and provider downloads can contribute evidence about adoption, developer engagement, distribution intensity, and changes in a product ecosystem. Their meaning depends on the source population, packaging model, release process, automation, mirrors, and the artifacts included in the maintained mapping.
- Compare like measures and ecosystems; a package download and a container pull are not equivalent units.
- Review artifact coverage and mapping changes before interpreting a company- or category-level inflection.
- Use level and change measures consistently, particularly for cumulative source counters.
- Do not interpret activity as revenue, paid seats, unique users, market share, or management-reported consumption unless independent evidence establishes that relationship.