{
  "format": "dataset-manifest/1",
  "slug": "app-marketplace-dynamics",
  "version": 3,
  "seed": "app-marketplace-dynamics:1",
  "spec": {
    "format": "dataset/1",
    "slug": "app-marketplace-dynamics",
    "name": "App Marketplace Dynamics",
    "tagline": "App versions, developer details, downloads, and subscription data from an app marketplace.",
    "description": "Developers create and update their software offerings in an application store, aiming to attract users who download apps, engage with in-app purchases, and subscribe to various services. This dynamic ecosystem thrives on user interaction and continual updates, which fuel the marketplace's vibrancy. Each app's lifecycle is recorded meticulously, from its initial release to subsequent versions, providing insights into user preferences and market trends. The interplay of developer efforts, app versions, and user statistics enables a comprehensive understanding of what drives success in this competitive environment.\n\nIn this dataset, the 'apps' table represents distinct software offerings, with each row detailing an app's unique identifier, name, and description. The 'versions' table links to the 'apps' table, capturing updates and enhancements made to each software offering, where each entry is tied to a specific app version. The 'developers' table provides information about the creators behind these apps, offering context on their background and contributions. The 'downloads' table records user interactions, with each entry indicating how many times an app has been downloaded over time. Finally, the 'subscriptions' table illustrates user engagement through recurring transactions, showing how many users have opted for subscription services linked to specific apps.\n\nThis dataset answers essential questions about app performance, user behavior, and developer impact. It allows for practical exercises in data analysis, such as identifying trends in download patterns, evaluating the relationship between app updates and user engagement, and analyzing subscription revenue models. With synthetic data representing a realistic marketplace, users can practice handling various data operations, from joins and aggregations to visualizations, enhancing their skills in the ecommerce domain.",
    "domain": "ecommerce",
    "shape": "slowly-changing",
    "useCases": [
      "etl-pipelines",
      "teaching"
    ],
    "keywords": [
      "apps",
      "downloads",
      "developers",
      "subscriptions",
      "transactions",
      "versions"
    ],
    "locale": "en",
    "license": "CC0-1.0",
    "version": 1,
    "tables": {
      "apps": {
        "description": "This table holds information about the apps available in the marketplace, including their current status and associated developer.",
        "rows": 200,
        "columns": {
          "id": {
            "kind": "pk",
            "description": "Unique identifier for each app."
          },
          "name": {
            "kind": "fullName",
            "description": "Name of the app."
          },
          "developer_id": {
            "kind": "fk",
            "ref": "developers.id",
            "description": "Identifier for the developer of the app."
          },
          "category": {
            "kind": "enum",
            "values": [
              "Games",
              "Productivity",
              "Social",
              "Utilities",
              "Health"
            ],
            "description": "Category of the app.",
            "weights": [
              6,
              4,
              3,
              2,
              1
            ]
          },
          "status": {
            "kind": "enum",
            "values": [
              "active",
              "inactive",
              "deprecated"
            ],
            "description": "Current status of the app.",
            "weights": [
              7,
              2,
              1
            ]
          }
        }
      },
      "versions": {
        "description": "This table tracks different versions of each app, including their release dates and features.",
        "rows": 500,
        "columns": {
          "id": {
            "kind": "pk",
            "description": "Unique identifier for each app version."
          },
          "app_id": {
            "kind": "fk",
            "ref": "apps.id",
            "description": "Identifier for the app this version belongs to."
          },
          "version_number": {
            "kind": "words",
            "description": "Version number of the app.",
            "pool": [
              "one",
              "two",
              "three",
              "four",
              "five",
              "six",
              "seven",
              "eight",
              "nine",
              "ten",
              "eleven",
              "twelve",
              "thirteen",
              "fourteen",
              "fifteen",
              "sixteen",
              "seventeen",
              "eighteen",
              "nineteen",
              "twenty",
              "21",
              "22",
              "23",
              "24",
              "25",
              "26",
              "27",
              "28",
              "29",
              "30",
              "31",
              "32",
              "33",
              "34",
              "35",
              "36",
              "37",
              "38",
              "39",
              "40",
              "41",
              "42",
              "43",
              "44",
              "45",
              "46",
              "47",
              "48",
              "49",
              "50"
            ],
            "min": 1,
            "max": 3
          },
          "release_date": {
            "kind": "date",
            "from": "2020-01-01",
            "to": "2023-12-31",
            "description": "Release date of this app version.",
            "trend": "growing"
          },
          "features": {
            "kind": "sentence",
            "description": "List of features included in this version.",
            "nullable": true
          }
        }
      },
      "developers": {
        "description": "This table contains information about app developers, including their experience and total apps published.",
        "rows": 100,
        "columns": {
          "id": {
            "kind": "pk",
            "description": "Unique identifier for each developer."
          },
          "name": {
            "kind": "fullName",
            "description": "Name of the developer."
          },
          "experience_years": {
            "kind": "int",
            "min": 0,
            "max": 30,
            "description": "Years of experience in app development.",
            "nullable": true,
            "distribution": "normal"
          },
          "total_apps": {
            "kind": "int",
            "min": 1,
            "max": 50,
            "description": "Total number of apps published by the developer.",
            "nullable": true,
            "distribution": "long-tail"
          }
        }
      },
      "downloads": {
        "description": "This table records download events for apps, capturing user interactions over time.",
        "rows": 1000,
        "columns": {
          "id": {
            "kind": "pk",
            "description": "Unique identifier for each download record."
          },
          "app_id": {
            "kind": "fk",
            "ref": "apps.id",
            "description": "Identifier for the downloaded app."
          },
          "user_id": {
            "kind": "uuid",
            "description": "Unique identifier for the user who downloaded the app."
          },
          "download_date": {
            "kind": "datetime",
            "from": "2020-01-01",
            "to": "2023-12-31",
            "description": "Date and time of the download.",
            "dayProfile": "waking"
          }
        }
      },
      "subscriptions": {
        "description": "This table holds information about subscriptions made by users for different apps.",
        "rows": 600,
        "columns": {
          "id": {
            "kind": "pk",
            "description": "Unique identifier for each subscription."
          },
          "app_id": {
            "kind": "fk",
            "ref": "apps.id",
            "description": "Identifier for the app associated with the subscription."
          },
          "user_id": {
            "kind": "uuid",
            "description": "Unique identifier for the user who subscribed."
          },
          "subscription_date": {
            "kind": "datetime",
            "from": "2020-01-01",
            "to": "2023-12-31",
            "description": "Date and time of subscription.",
            "nullable": true,
            "when": {
              "column": "status",
              "in": [
                "active",
                "cancelled"
              ]
            },
            "dayProfile": "business"
          },
          "status": {
            "kind": "enum",
            "values": [
              "active",
              "cancelled",
              "expired"
            ],
            "description": "Current status of the subscription.",
            "weights": [
              5,
              3,
              2
            ]
          }
        }
      }
    },
    "structure": "multi-table",
    "traits": [
      "timestamped",
      "categorical",
      "nullable"
    ],
    "analysisQuestions": [
      "How do app updates influence download trends over time?",
      "What categories of apps are most popular among users?",
      "Is there a relationship between developer experience and app success?",
      "What is the average duration of user subscriptions for different apps?",
      "How do the features of app versions affect user engagement?"
    ],
    "suggestedQueries": [
      {
        "title": "Join apps with downloads",
        "sql": "SELECT apps.name, COUNT(downloads.id) AS total_downloads FROM apps JOIN downloads ON apps.id = downloads.app_id GROUP BY apps.name;",
        "dialect": "postgres"
      },
      {
        "title": "App download trends by category",
        "sql": "SELECT category, COUNT(id) AS total_downloads FROM apps JOIN downloads ON apps.id = downloads.app_id GROUP BY category;",
        "dialect": "postgres"
      },
      {
        "title": "Average subscription duration",
        "sql": "SELECT app_id, AVG(EXTRACT(EPOCH FROM (NOW() - subscription_date))/86400) AS avg_duration_days FROM subscriptions WHERE status = 'active' GROUP BY app_id;",
        "dialect": "postgres"
      },
      {
        "title": "Count of active subscriptions by app",
        "sql": "SELECT apps.name, COUNT(subscriptions.id) AS active_subscriptions FROM apps JOIN subscriptions ON apps.id = subscriptions.app_id WHERE subscriptions.status = 'active' GROUP BY apps.name;",
        "dialect": "postgres"
      },
      {
        "title": "Recent app version releases",
        "sql": "SELECT apps.name, versions.version_number, versions.release_date FROM apps JOIN versions ON apps.id = versions.app_id WHERE versions.release_date > NOW() - INTERVAL '1 month';",
        "dialect": "postgres"
      }
    ],
    "usageScenarios": [
      {
        "title": "Data Analysts",
        "body": "Data analysts can utilize this dataset to explore trends in app downloads and understand user behavior over time. By analyzing the relationships between app versions and their download counts, they can identify which updates drive engagement and which features users value most. This insight can inform future development and marketing strategies."
      },
      {
        "title": "Educators",
        "body": "Educators can use this dataset as a teaching tool in data analysis and SQL courses. It provides a realistic scenario for students to practice writing queries, performing joins, and analyzing trends over time. The synthetic nature of the data allows for safe experimentation without privacy concerns."
      },
      {
        "title": "Developers",
        "body": "App developers can leverage this dataset to benchmark their apps against competitors. By analyzing developer experience, app categories, and user engagement metrics, they can gain insights into what makes an app successful and how to improve their offerings in the marketplace."
      },
      {
        "title": "Business Analysts",
        "body": "Business analysts can use this dataset to evaluate the performance of apps in different categories. By assessing download trends and subscription rates, they can provide strategic recommendations to stakeholders on where to invest resources and how to optimize app offerings for better user retention."
      }
    ]
  },
  "counts": {
    "developers": 100,
    "apps": 200,
    "downloads": 1000,
    "subscriptions": 600,
    "versions": 500
  },
  "stats": {
    "apps": {
      "rows": 200,
      "columns": {
        "id": {
          "nulls": 0,
          "distinct": 200,
          "min": 1,
          "max": 200
        },
        "name": {
          "nulls": 0,
          "distinct": 195,
          "min": "Alice Davis",
          "max": "Zoe Wilson"
        },
        "developer_id": {
          "nulls": 0,
          "distinct": 91,
          "min": 1,
          "max": 100
        },
        "category": {
          "nulls": 0,
          "distinct": 5,
          "min": "Games",
          "max": "Utilities"
        },
        "status": {
          "nulls": 0,
          "distinct": 3,
          "min": "active",
          "max": "inactive"
        }
      }
    },
    "versions": {
      "rows": 500,
      "columns": {
        "id": {
          "nulls": 0,
          "distinct": 500,
          "min": 1,
          "max": 500
        },
        "app_id": {
          "nulls": 0,
          "distinct": 181,
          "min": 2,
          "max": 200
        },
        "version_number": {
          "nulls": 0,
          "distinct": 363
        },
        "release_date": {
          "nulls": 0,
          "distinct": 421,
          "min": "2020-01-10",
          "max": "2023-12-29"
        },
        "features": {
          "nulls": 47,
          "distinct": 451
        }
      }
    },
    "developers": {
      "rows": 100,
      "columns": {
        "id": {
          "nulls": 0,
          "distinct": 100,
          "min": 1,
          "max": 100
        },
        "name": {
          "nulls": 0,
          "distinct": 99,
          "min": "Andre Singh",
          "max": "Zoe Ruiz"
        },
        "experience_years": {
          "nulls": 7,
          "distinct": 19,
          "min": 6,
          "max": 25
        },
        "total_apps": {
          "nulls": 10,
          "distinct": 40,
          "min": 1,
          "max": 48
        }
      }
    },
    "downloads": {
      "rows": 1000,
      "columns": {
        "id": {
          "nulls": 0,
          "distinct": 1000,
          "min": 1,
          "max": 1000
        },
        "app_id": {
          "nulls": 0,
          "distinct": 199,
          "min": 1,
          "max": 200
        },
        "user_id": {
          "nulls": 0,
          "distinct": 1000
        },
        "download_date": {
          "nulls": 0,
          "distinct": 1000,
          "min": "2020-01-02 20:59:04",
          "max": "2023-12-30 17:17:25"
        }
      }
    },
    "subscriptions": {
      "rows": 600,
      "columns": {
        "id": {
          "nulls": 0,
          "distinct": 600,
          "min": 1,
          "max": 600
        },
        "app_id": {
          "nulls": 0,
          "distinct": 187,
          "min": 1,
          "max": 199
        },
        "user_id": {
          "nulls": 0,
          "distinct": 600
        },
        "subscription_date": {
          "nulls": 113,
          "distinct": 487,
          "min": "2020-01-04 16:36:39",
          "max": "2023-12-29 20:54:28"
        },
        "status": {
          "nulls": 0,
          "distinct": 3,
          "min": "active",
          "max": "expired"
        }
      }
    }
  },
  "artifacts": [
    {
      "file": "csv/developers.csv",
      "format": "csv",
      "table": "developers",
      "key": "datasets/app-marketplace-dynamics/v3/csv/developers.csv",
      "url": "https://database-sample-website.s3.eu-north-1.amazonaws.com/datasets/app-marketplace-dynamics/v3/csv/developers.csv",
      "bytes": 2126,
      "sha256": "11f89643900a1fdbd2fad78b6ba8203d968fcb0e69ca419b183d0953332e926c",
      "rows": 100,
      "contentType": "text/csv; charset=utf-8"
    },
    {
      "file": "csv/apps.csv",
      "format": "csv",
      "table": "apps",
      "key": "datasets/app-marketplace-dynamics/v3/csv/apps.csv",
      "url": "https://database-sample-website.s3.eu-north-1.amazonaws.com/datasets/app-marketplace-dynamics/v3/csv/apps.csv",
      "bytes": 7195,
      "sha256": "fd7d20d8126c1a329ebf8556fb0681fb15f5d0fea445c2ed99c56029ea8212f2",
      "rows": 200,
      "contentType": "text/csv; charset=utf-8"
    },
    {
      "file": "csv/downloads.csv",
      "format": "csv",
      "table": "downloads",
      "key": "datasets/app-marketplace-dynamics/v3/csv/downloads.csv",
      "url": "https://database-sample-website.s3.eu-north-1.amazonaws.com/datasets/app-marketplace-dynamics/v3/csv/downloads.csv",
      "bytes": 65400,
      "sha256": "582242a789c2a13d276d4f7b3114cae021945e11ec4f5c852f50f2eb23881fff",
      "rows": 1000,
      "contentType": "text/csv; charset=utf-8"
    },
    {
      "file": "csv/subscriptions.csv",
      "format": "csv",
      "table": "subscriptions",
      "key": "datasets/app-marketplace-dynamics/v3/csv/subscriptions.csv",
      "url": "https://database-sample-website.s3.eu-north-1.amazonaws.com/datasets/app-marketplace-dynamics/v3/csv/subscriptions.csv",
      "bytes": 41951,
      "sha256": "2005aafe3a7cd829e9e9c02d61f541e59e51fd8c76728aacd303e1b5100e3fc8",
      "rows": 600,
      "contentType": "text/csv; charset=utf-8"
    },
    {
      "file": "csv/versions.csv",
      "format": "csv",
      "table": "versions",
      "key": "datasets/app-marketplace-dynamics/v3/csv/versions.csv",
      "url": "https://database-sample-website.s3.eu-north-1.amazonaws.com/datasets/app-marketplace-dynamics/v3/csv/versions.csv",
      "bytes": 39747,
      "sha256": "ae5c622ff5adc8dd291e753c66a0de689433ac0b78b253041f2e0380f120d443",
      "rows": 500,
      "contentType": "text/csv; charset=utf-8"
    },
    {
      "file": "app-marketplace-dynamics.json",
      "format": "json",
      "table": null,
      "key": "datasets/app-marketplace-dynamics/v3/app-marketplace-dynamics.json",
      "url": "https://database-sample-website.s3.eu-north-1.amazonaws.com/datasets/app-marketplace-dynamics/v3/app-marketplace-dynamics.json",
      "bytes": 396242,
      "sha256": "95535373c712d91321f4dc904c08934b3a40e02027a5946a66a166b32af61999",
      "rows": null,
      "contentType": "application/json; charset=utf-8"
    },
    {
      "file": "sql/postgres.sql",
      "format": "sql-postgres",
      "table": null,
      "key": "datasets/app-marketplace-dynamics/v3/sql/postgres.sql",
      "url": "https://database-sample-website.s3.eu-north-1.amazonaws.com/datasets/app-marketplace-dynamics/v3/sql/postgres.sql",
      "bytes": 194731,
      "sha256": "9fb465e3758e7c5d18990d7461c49aa674cf9b42b7fc1a849943551390f59aba",
      "rows": null,
      "contentType": "application/sql; charset=utf-8"
    },
    {
      "file": "sql/mysql.sql",
      "format": "sql-mysql",
      "table": null,
      "key": "datasets/app-marketplace-dynamics/v3/sql/mysql.sql",
      "url": "https://database-sample-website.s3.eu-north-1.amazonaws.com/datasets/app-marketplace-dynamics/v3/sql/mysql.sql",
      "bytes": 194174,
      "sha256": "f76e58a8ca9959d5e49a1bda48e01cc8811be50b82e077b9979178a77ce8846b",
      "rows": null,
      "contentType": "application/sql; charset=utf-8"
    },
    {
      "file": "sql/mssql.sql",
      "format": "sql-mssql",
      "table": null,
      "key": "datasets/app-marketplace-dynamics/v3/sql/mssql.sql",
      "url": "https://database-sample-website.s3.eu-north-1.amazonaws.com/datasets/app-marketplace-dynamics/v3/sql/mssql.sql",
      "bytes": 200360,
      "sha256": "e5541d433a56b097a007703e6eae0b38e872f0d392e42a8a26c6750f5721ed3f",
      "rows": null,
      "contentType": "application/sql; charset=utf-8"
    },
    {
      "file": "sql/sqlite.sql",
      "format": "sql-sqlite",
      "table": null,
      "key": "datasets/app-marketplace-dynamics/v3/sql/sqlite.sql",
      "url": "https://database-sample-website.s3.eu-north-1.amazonaws.com/datasets/app-marketplace-dynamics/v3/sql/sqlite.sql",
      "bytes": 193987,
      "sha256": "9982bf4efbe1eb64d9f50a945bc931e94a045c0aee6e61437162fa5a344570eb",
      "rows": null,
      "contentType": "application/sql; charset=utf-8"
    },
    {
      "file": "prisma/seed.ts",
      "format": "prisma-seed",
      "table": null,
      "key": "datasets/app-marketplace-dynamics/v3/prisma/seed.ts",
      "url": "https://database-sample-website.s3.eu-north-1.amazonaws.com/datasets/app-marketplace-dynamics/v3/prisma/seed.ts",
      "bytes": 336088,
      "sha256": "90e9ca0f9836cf1e73fabb0f9286dfb5d33ccb9ea8fb7de3b0974627c9205d66",
      "rows": null,
      "contentType": "application/typescript; charset=utf-8"
    },
    {
      "file": "django/fixtures.json",
      "format": "django-fixture",
      "table": null,
      "key": "datasets/app-marketplace-dynamics/v3/django/fixtures.json",
      "url": "https://database-sample-website.s3.eu-north-1.amazonaws.com/datasets/app-marketplace-dynamics/v3/django/fixtures.json",
      "bytes": 499725,
      "sha256": "8cab360766d37f75a4701a0c3c76467971322ef1244c309bcc59f79e1199f378",
      "rows": null,
      "contentType": "application/json; charset=utf-8"
    }
  ],
  "publishedAt": 1788766755581,
  "updatedAt": 1788782408657
}
