ingestr 0.13.2__tar.gz → 0.13.4__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of ingestr might be problematic. Click here for more details.

Files changed (221) hide show
  1. ingestr-0.13.4/.github/workflows/release.yml +79 -0
  2. {ingestr-0.13.2 → ingestr-0.13.4}/.github/workflows/tests.yml +1 -43
  3. {ingestr-0.13.2 → ingestr-0.13.4}/.gitignore +1 -0
  4. {ingestr-0.13.2 → ingestr-0.13.4}/Makefile +5 -0
  5. {ingestr-0.13.2 → ingestr-0.13.4}/PKG-INFO +58 -19
  6. {ingestr-0.13.2 → ingestr-0.13.4}/README.md +57 -18
  7. {ingestr-0.13.2 → ingestr-0.13.4}/docs/.vitepress/config.mjs +1 -0
  8. ingestr-0.13.4/docs/supported-sources/applovin.md +144 -0
  9. {ingestr-0.13.2 → ingestr-0.13.4}/docs/supported-sources/clickhouse.md +9 -2
  10. ingestr-0.13.4/ingestr/src/applovin/__init__.py +282 -0
  11. {ingestr-0.13.2 → ingestr-0.13.4}/ingestr/src/destinations.py +7 -6
  12. {ingestr-0.13.2 → ingestr-0.13.4}/ingestr/src/factory.py +4 -1
  13. ingestr-0.13.4/ingestr/src/loader.py +69 -0
  14. {ingestr-0.13.2 → ingestr-0.13.4}/ingestr/src/sources.py +50 -0
  15. ingestr-0.13.4/ingestr/src/version.py +6 -0
  16. {ingestr-0.13.2 → ingestr-0.13.4}/pyproject.toml +3 -0
  17. ingestr-0.13.2/ingestr/src/version.py +0 -1
  18. {ingestr-0.13.2 → ingestr-0.13.4}/.dockerignore +0 -0
  19. {ingestr-0.13.2 → ingestr-0.13.4}/.githooks/pre-commit-hook.sh +0 -0
  20. {ingestr-0.13.2 → ingestr-0.13.4}/.github/workflows/deploy-docs.yml +0 -0
  21. {ingestr-0.13.2 → ingestr-0.13.4}/.github/workflows/secrets-scan.yml +0 -0
  22. {ingestr-0.13.2 → ingestr-0.13.4}/.gitleaksignore +0 -0
  23. {ingestr-0.13.2 → ingestr-0.13.4}/.python-version +0 -0
  24. {ingestr-0.13.2 → ingestr-0.13.4}/.vale.ini +0 -0
  25. {ingestr-0.13.2 → ingestr-0.13.4}/Dockerfile +0 -0
  26. {ingestr-0.13.2 → ingestr-0.13.4}/LICENSE.md +0 -0
  27. {ingestr-0.13.2 → ingestr-0.13.4}/docs/.vitepress/theme/custom.css +0 -0
  28. {ingestr-0.13.2 → ingestr-0.13.4}/docs/.vitepress/theme/index.js +0 -0
  29. {ingestr-0.13.2 → ingestr-0.13.4}/docs/commands/example-uris.md +0 -0
  30. {ingestr-0.13.2 → ingestr-0.13.4}/docs/commands/ingest.md +0 -0
  31. {ingestr-0.13.2 → ingestr-0.13.4}/docs/getting-started/core-concepts.md +0 -0
  32. {ingestr-0.13.2 → ingestr-0.13.4}/docs/getting-started/incremental-loading.md +0 -0
  33. {ingestr-0.13.2 → ingestr-0.13.4}/docs/getting-started/quickstart.md +0 -0
  34. {ingestr-0.13.2 → ingestr-0.13.4}/docs/getting-started/telemetry.md +0 -0
  35. {ingestr-0.13.2 → ingestr-0.13.4}/docs/index.md +0 -0
  36. {ingestr-0.13.2 → ingestr-0.13.4}/docs/media/athena.png +0 -0
  37. {ingestr-0.13.2 → ingestr-0.13.4}/docs/media/clickhouse_img.png +0 -0
  38. {ingestr-0.13.2 → ingestr-0.13.4}/docs/media/github.png +0 -0
  39. {ingestr-0.13.2 → ingestr-0.13.4}/docs/media/googleanalytics.png +0 -0
  40. {ingestr-0.13.2 → ingestr-0.13.4}/docs/media/linkedin_ads.png +0 -0
  41. {ingestr-0.13.2 → ingestr-0.13.4}/docs/media/tiktok.png +0 -0
  42. {ingestr-0.13.2 → ingestr-0.13.4}/docs/supported-sources/adjust.md +0 -0
  43. {ingestr-0.13.2 → ingestr-0.13.4}/docs/supported-sources/airtable.md +0 -0
  44. {ingestr-0.13.2 → ingestr-0.13.4}/docs/supported-sources/appsflyer.md +0 -0
  45. {ingestr-0.13.2 → ingestr-0.13.4}/docs/supported-sources/appstore.md +0 -0
  46. {ingestr-0.13.2 → ingestr-0.13.4}/docs/supported-sources/asana.md +0 -0
  47. {ingestr-0.13.2 → ingestr-0.13.4}/docs/supported-sources/athena.md +0 -0
  48. {ingestr-0.13.2 → ingestr-0.13.4}/docs/supported-sources/bigquery.md +0 -0
  49. {ingestr-0.13.2 → ingestr-0.13.4}/docs/supported-sources/chess.md +0 -0
  50. {ingestr-0.13.2 → ingestr-0.13.4}/docs/supported-sources/csv.md +0 -0
  51. {ingestr-0.13.2 → ingestr-0.13.4}/docs/supported-sources/custom_queries.md +0 -0
  52. {ingestr-0.13.2 → ingestr-0.13.4}/docs/supported-sources/databricks.md +0 -0
  53. {ingestr-0.13.2 → ingestr-0.13.4}/docs/supported-sources/duckdb.md +0 -0
  54. {ingestr-0.13.2 → ingestr-0.13.4}/docs/supported-sources/dynamodb.md +0 -0
  55. {ingestr-0.13.2 → ingestr-0.13.4}/docs/supported-sources/facebook-ads.md +0 -0
  56. {ingestr-0.13.2 → ingestr-0.13.4}/docs/supported-sources/gcs.md +0 -0
  57. {ingestr-0.13.2 → ingestr-0.13.4}/docs/supported-sources/github.md +0 -0
  58. {ingestr-0.13.2 → ingestr-0.13.4}/docs/supported-sources/google-ads.md +0 -0
  59. {ingestr-0.13.2 → ingestr-0.13.4}/docs/supported-sources/google_analytics.md +0 -0
  60. {ingestr-0.13.2 → ingestr-0.13.4}/docs/supported-sources/gorgias.md +0 -0
  61. {ingestr-0.13.2 → ingestr-0.13.4}/docs/supported-sources/gsheets.md +0 -0
  62. {ingestr-0.13.2 → ingestr-0.13.4}/docs/supported-sources/hubspot.md +0 -0
  63. {ingestr-0.13.2 → ingestr-0.13.4}/docs/supported-sources/kafka.md +0 -0
  64. {ingestr-0.13.2 → ingestr-0.13.4}/docs/supported-sources/klaviyo.md +0 -0
  65. {ingestr-0.13.2 → ingestr-0.13.4}/docs/supported-sources/linkedin_ads.md +0 -0
  66. {ingestr-0.13.2 → ingestr-0.13.4}/docs/supported-sources/mongodb.md +0 -0
  67. {ingestr-0.13.2 → ingestr-0.13.4}/docs/supported-sources/mssql.md +0 -0
  68. {ingestr-0.13.2 → ingestr-0.13.4}/docs/supported-sources/mysql.md +0 -0
  69. {ingestr-0.13.2 → ingestr-0.13.4}/docs/supported-sources/notion.md +0 -0
  70. {ingestr-0.13.2 → ingestr-0.13.4}/docs/supported-sources/oracle.md +0 -0
  71. {ingestr-0.13.2 → ingestr-0.13.4}/docs/supported-sources/postgres.md +0 -0
  72. {ingestr-0.13.2 → ingestr-0.13.4}/docs/supported-sources/redshift.md +0 -0
  73. {ingestr-0.13.2 → ingestr-0.13.4}/docs/supported-sources/s3.md +0 -0
  74. {ingestr-0.13.2 → ingestr-0.13.4}/docs/supported-sources/sap-hana.md +0 -0
  75. {ingestr-0.13.2 → ingestr-0.13.4}/docs/supported-sources/shopify.md +0 -0
  76. {ingestr-0.13.2 → ingestr-0.13.4}/docs/supported-sources/slack.md +0 -0
  77. {ingestr-0.13.2 → ingestr-0.13.4}/docs/supported-sources/snowflake.md +0 -0
  78. {ingestr-0.13.2 → ingestr-0.13.4}/docs/supported-sources/sqlite.md +0 -0
  79. {ingestr-0.13.2 → ingestr-0.13.4}/docs/supported-sources/stripe.md +0 -0
  80. {ingestr-0.13.2 → ingestr-0.13.4}/docs/supported-sources/tiktok-ads.md +0 -0
  81. {ingestr-0.13.2 → ingestr-0.13.4}/docs/supported-sources/zendesk.md +0 -0
  82. {ingestr-0.13.2 → ingestr-0.13.4}/ingestr/main.py +0 -0
  83. {ingestr-0.13.2 → ingestr-0.13.4}/ingestr/src/.gitignore +0 -0
  84. {ingestr-0.13.2 → ingestr-0.13.4}/ingestr/src/adjust/__init__.py +0 -0
  85. {ingestr-0.13.2 → ingestr-0.13.4}/ingestr/src/adjust/adjust_helpers.py +0 -0
  86. {ingestr-0.13.2 → ingestr-0.13.4}/ingestr/src/airtable/__init__.py +0 -0
  87. {ingestr-0.13.2 → ingestr-0.13.4}/ingestr/src/appsflyer/_init_.py +0 -0
  88. {ingestr-0.13.2 → ingestr-0.13.4}/ingestr/src/appsflyer/client.py +0 -0
  89. {ingestr-0.13.2 → ingestr-0.13.4}/ingestr/src/appstore/__init__.py +0 -0
  90. {ingestr-0.13.2 → ingestr-0.13.4}/ingestr/src/appstore/client.py +0 -0
  91. {ingestr-0.13.2 → ingestr-0.13.4}/ingestr/src/appstore/errors.py +0 -0
  92. {ingestr-0.13.2 → ingestr-0.13.4}/ingestr/src/appstore/models.py +0 -0
  93. {ingestr-0.13.2 → ingestr-0.13.4}/ingestr/src/appstore/resources.py +0 -0
  94. {ingestr-0.13.2 → ingestr-0.13.4}/ingestr/src/arrow/__init__.py +0 -0
  95. {ingestr-0.13.2 → ingestr-0.13.4}/ingestr/src/asana_source/__init__.py +0 -0
  96. {ingestr-0.13.2 → ingestr-0.13.4}/ingestr/src/asana_source/helpers.py +0 -0
  97. {ingestr-0.13.2 → ingestr-0.13.4}/ingestr/src/asana_source/settings.py +0 -0
  98. {ingestr-0.13.2 → ingestr-0.13.4}/ingestr/src/blob.py +0 -0
  99. {ingestr-0.13.2 → ingestr-0.13.4}/ingestr/src/chess/__init__.py +0 -0
  100. {ingestr-0.13.2 → ingestr-0.13.4}/ingestr/src/chess/helpers.py +0 -0
  101. {ingestr-0.13.2 → ingestr-0.13.4}/ingestr/src/chess/settings.py +0 -0
  102. {ingestr-0.13.2 → ingestr-0.13.4}/ingestr/src/dynamodb/__init__.py +0 -0
  103. {ingestr-0.13.2 → ingestr-0.13.4}/ingestr/src/errors.py +0 -0
  104. {ingestr-0.13.2 → ingestr-0.13.4}/ingestr/src/facebook_ads/__init__.py +0 -0
  105. {ingestr-0.13.2 → ingestr-0.13.4}/ingestr/src/facebook_ads/exceptions.py +0 -0
  106. {ingestr-0.13.2 → ingestr-0.13.4}/ingestr/src/facebook_ads/helpers.py +0 -0
  107. {ingestr-0.13.2 → ingestr-0.13.4}/ingestr/src/facebook_ads/settings.py +0 -0
  108. {ingestr-0.13.2 → ingestr-0.13.4}/ingestr/src/filesystem/__init__.py +0 -0
  109. {ingestr-0.13.2 → ingestr-0.13.4}/ingestr/src/filesystem/helpers.py +0 -0
  110. {ingestr-0.13.2 → ingestr-0.13.4}/ingestr/src/filesystem/readers.py +0 -0
  111. {ingestr-0.13.2 → ingestr-0.13.4}/ingestr/src/filters.py +0 -0
  112. {ingestr-0.13.2 → ingestr-0.13.4}/ingestr/src/github/__init__.py +0 -0
  113. {ingestr-0.13.2 → ingestr-0.13.4}/ingestr/src/github/helpers.py +0 -0
  114. {ingestr-0.13.2 → ingestr-0.13.4}/ingestr/src/github/queries.py +0 -0
  115. {ingestr-0.13.2 → ingestr-0.13.4}/ingestr/src/github/settings.py +0 -0
  116. {ingestr-0.13.2 → ingestr-0.13.4}/ingestr/src/google_ads/__init__.py +0 -0
  117. {ingestr-0.13.2 → ingestr-0.13.4}/ingestr/src/google_ads/field.py +0 -0
  118. {ingestr-0.13.2 → ingestr-0.13.4}/ingestr/src/google_ads/metrics.py +0 -0
  119. {ingestr-0.13.2 → ingestr-0.13.4}/ingestr/src/google_ads/predicates.py +0 -0
  120. {ingestr-0.13.2 → ingestr-0.13.4}/ingestr/src/google_ads/reports.py +0 -0
  121. {ingestr-0.13.2 → ingestr-0.13.4}/ingestr/src/google_analytics/__init__.py +0 -0
  122. {ingestr-0.13.2 → ingestr-0.13.4}/ingestr/src/google_analytics/helpers.py +0 -0
  123. {ingestr-0.13.2 → ingestr-0.13.4}/ingestr/src/google_sheets/README.md +0 -0
  124. {ingestr-0.13.2 → ingestr-0.13.4}/ingestr/src/google_sheets/__init__.py +0 -0
  125. {ingestr-0.13.2 → ingestr-0.13.4}/ingestr/src/google_sheets/helpers/__init__.py +0 -0
  126. {ingestr-0.13.2 → ingestr-0.13.4}/ingestr/src/google_sheets/helpers/api_calls.py +0 -0
  127. {ingestr-0.13.2 → ingestr-0.13.4}/ingestr/src/google_sheets/helpers/data_processing.py +0 -0
  128. {ingestr-0.13.2 → ingestr-0.13.4}/ingestr/src/gorgias/__init__.py +0 -0
  129. {ingestr-0.13.2 → ingestr-0.13.4}/ingestr/src/gorgias/helpers.py +0 -0
  130. {ingestr-0.13.2 → ingestr-0.13.4}/ingestr/src/hubspot/__init__.py +0 -0
  131. {ingestr-0.13.2 → ingestr-0.13.4}/ingestr/src/hubspot/helpers.py +0 -0
  132. {ingestr-0.13.2 → ingestr-0.13.4}/ingestr/src/hubspot/settings.py +0 -0
  133. {ingestr-0.13.2 → ingestr-0.13.4}/ingestr/src/kafka/__init__.py +0 -0
  134. {ingestr-0.13.2 → ingestr-0.13.4}/ingestr/src/kafka/helpers.py +0 -0
  135. {ingestr-0.13.2 → ingestr-0.13.4}/ingestr/src/klaviyo/_init_.py +0 -0
  136. {ingestr-0.13.2 → ingestr-0.13.4}/ingestr/src/klaviyo/client.py +0 -0
  137. {ingestr-0.13.2 → ingestr-0.13.4}/ingestr/src/klaviyo/helpers.py +0 -0
  138. {ingestr-0.13.2 → ingestr-0.13.4}/ingestr/src/linkedin_ads/__init__.py +0 -0
  139. {ingestr-0.13.2 → ingestr-0.13.4}/ingestr/src/linkedin_ads/dimension_time_enum.py +0 -0
  140. {ingestr-0.13.2 → ingestr-0.13.4}/ingestr/src/linkedin_ads/helpers.py +0 -0
  141. {ingestr-0.13.2 → ingestr-0.13.4}/ingestr/src/mongodb/__init__.py +0 -0
  142. {ingestr-0.13.2 → ingestr-0.13.4}/ingestr/src/mongodb/helpers.py +0 -0
  143. {ingestr-0.13.2 → ingestr-0.13.4}/ingestr/src/notion/__init__.py +0 -0
  144. {ingestr-0.13.2 → ingestr-0.13.4}/ingestr/src/notion/helpers/__init__.py +0 -0
  145. {ingestr-0.13.2 → ingestr-0.13.4}/ingestr/src/notion/helpers/client.py +0 -0
  146. {ingestr-0.13.2 → ingestr-0.13.4}/ingestr/src/notion/helpers/database.py +0 -0
  147. {ingestr-0.13.2 → ingestr-0.13.4}/ingestr/src/notion/settings.py +0 -0
  148. {ingestr-0.13.2 → ingestr-0.13.4}/ingestr/src/shopify/__init__.py +0 -0
  149. {ingestr-0.13.2 → ingestr-0.13.4}/ingestr/src/shopify/exceptions.py +0 -0
  150. {ingestr-0.13.2 → ingestr-0.13.4}/ingestr/src/shopify/helpers.py +0 -0
  151. {ingestr-0.13.2 → ingestr-0.13.4}/ingestr/src/shopify/settings.py +0 -0
  152. {ingestr-0.13.2 → ingestr-0.13.4}/ingestr/src/slack/__init__.py +0 -0
  153. {ingestr-0.13.2 → ingestr-0.13.4}/ingestr/src/slack/helpers.py +0 -0
  154. {ingestr-0.13.2 → ingestr-0.13.4}/ingestr/src/slack/settings.py +0 -0
  155. {ingestr-0.13.2 → ingestr-0.13.4}/ingestr/src/sql_database/__init__.py +0 -0
  156. {ingestr-0.13.2 → ingestr-0.13.4}/ingestr/src/sql_database/callbacks.py +0 -0
  157. {ingestr-0.13.2 → ingestr-0.13.4}/ingestr/src/stripe_analytics/__init__.py +0 -0
  158. {ingestr-0.13.2 → ingestr-0.13.4}/ingestr/src/stripe_analytics/helpers.py +0 -0
  159. {ingestr-0.13.2 → ingestr-0.13.4}/ingestr/src/stripe_analytics/settings.py +0 -0
  160. {ingestr-0.13.2 → ingestr-0.13.4}/ingestr/src/table_definition.py +0 -0
  161. {ingestr-0.13.2 → ingestr-0.13.4}/ingestr/src/telemetry/event.py +0 -0
  162. {ingestr-0.13.2 → ingestr-0.13.4}/ingestr/src/testdata/fakebqcredentials.json +0 -0
  163. {ingestr-0.13.2 → ingestr-0.13.4}/ingestr/src/tiktok_ads/__init__.py +0 -0
  164. {ingestr-0.13.2 → ingestr-0.13.4}/ingestr/src/tiktok_ads/tiktok_helpers.py +0 -0
  165. {ingestr-0.13.2 → ingestr-0.13.4}/ingestr/src/time.py +0 -0
  166. {ingestr-0.13.2 → ingestr-0.13.4}/ingestr/src/zendesk/__init__.py +0 -0
  167. {ingestr-0.13.2 → ingestr-0.13.4}/ingestr/src/zendesk/helpers/__init__.py +0 -0
  168. {ingestr-0.13.2 → ingestr-0.13.4}/ingestr/src/zendesk/helpers/api_helpers.py +0 -0
  169. {ingestr-0.13.2 → ingestr-0.13.4}/ingestr/src/zendesk/helpers/credentials.py +0 -0
  170. {ingestr-0.13.2 → ingestr-0.13.4}/ingestr/src/zendesk/helpers/talk_api.py +0 -0
  171. {ingestr-0.13.2 → ingestr-0.13.4}/ingestr/src/zendesk/settings.py +0 -0
  172. {ingestr-0.13.2 → ingestr-0.13.4}/ingestr/testdata/.gitignore +0 -0
  173. {ingestr-0.13.2 → ingestr-0.13.4}/ingestr/testdata/create_replace.csv +0 -0
  174. {ingestr-0.13.2 → ingestr-0.13.4}/ingestr/testdata/delete_insert_expected.csv +0 -0
  175. {ingestr-0.13.2 → ingestr-0.13.4}/ingestr/testdata/delete_insert_part1.csv +0 -0
  176. {ingestr-0.13.2 → ingestr-0.13.4}/ingestr/testdata/delete_insert_part2.csv +0 -0
  177. {ingestr-0.13.2 → ingestr-0.13.4}/ingestr/testdata/merge_expected.csv +0 -0
  178. {ingestr-0.13.2 → ingestr-0.13.4}/ingestr/testdata/merge_part1.csv +0 -0
  179. {ingestr-0.13.2 → ingestr-0.13.4}/ingestr/testdata/merge_part2.csv +0 -0
  180. {ingestr-0.13.2 → ingestr-0.13.4}/package-lock.json +0 -0
  181. {ingestr-0.13.2 → ingestr-0.13.4}/package.json +0 -0
  182. {ingestr-0.13.2 → ingestr-0.13.4}/requirements-dev.txt +0 -0
  183. {ingestr-0.13.2 → ingestr-0.13.4}/requirements.txt +0 -0
  184. {ingestr-0.13.2 → ingestr-0.13.4}/resources/demo.gif +0 -0
  185. {ingestr-0.13.2 → ingestr-0.13.4}/resources/demo.tape +0 -0
  186. {ingestr-0.13.2 → ingestr-0.13.4}/resources/ingestr.svg +0 -0
  187. {ingestr-0.13.2 → ingestr-0.13.4}/styles/Google/AMPM.yml +0 -0
  188. {ingestr-0.13.2 → ingestr-0.13.4}/styles/Google/Acronyms.yml +0 -0
  189. {ingestr-0.13.2 → ingestr-0.13.4}/styles/Google/Colons.yml +0 -0
  190. {ingestr-0.13.2 → ingestr-0.13.4}/styles/Google/Contractions.yml +0 -0
  191. {ingestr-0.13.2 → ingestr-0.13.4}/styles/Google/DateFormat.yml +0 -0
  192. {ingestr-0.13.2 → ingestr-0.13.4}/styles/Google/Ellipses.yml +0 -0
  193. {ingestr-0.13.2 → ingestr-0.13.4}/styles/Google/EmDash.yml +0 -0
  194. {ingestr-0.13.2 → ingestr-0.13.4}/styles/Google/Exclamation.yml +0 -0
  195. {ingestr-0.13.2 → ingestr-0.13.4}/styles/Google/FirstPerson.yml +0 -0
  196. {ingestr-0.13.2 → ingestr-0.13.4}/styles/Google/Gender.yml +0 -0
  197. {ingestr-0.13.2 → ingestr-0.13.4}/styles/Google/GenderBias.yml +0 -0
  198. {ingestr-0.13.2 → ingestr-0.13.4}/styles/Google/HeadingPunctuation.yml +0 -0
  199. {ingestr-0.13.2 → ingestr-0.13.4}/styles/Google/Headings.yml +0 -0
  200. {ingestr-0.13.2 → ingestr-0.13.4}/styles/Google/Latin.yml +0 -0
  201. {ingestr-0.13.2 → ingestr-0.13.4}/styles/Google/LyHyphens.yml +0 -0
  202. {ingestr-0.13.2 → ingestr-0.13.4}/styles/Google/OptionalPlurals.yml +0 -0
  203. {ingestr-0.13.2 → ingestr-0.13.4}/styles/Google/Ordinal.yml +0 -0
  204. {ingestr-0.13.2 → ingestr-0.13.4}/styles/Google/OxfordComma.yml +0 -0
  205. {ingestr-0.13.2 → ingestr-0.13.4}/styles/Google/Parens.yml +0 -0
  206. {ingestr-0.13.2 → ingestr-0.13.4}/styles/Google/Passive.yml +0 -0
  207. {ingestr-0.13.2 → ingestr-0.13.4}/styles/Google/Periods.yml +0 -0
  208. {ingestr-0.13.2 → ingestr-0.13.4}/styles/Google/Quotes.yml +0 -0
  209. {ingestr-0.13.2 → ingestr-0.13.4}/styles/Google/Ranges.yml +0 -0
  210. {ingestr-0.13.2 → ingestr-0.13.4}/styles/Google/Semicolons.yml +0 -0
  211. {ingestr-0.13.2 → ingestr-0.13.4}/styles/Google/Slang.yml +0 -0
  212. {ingestr-0.13.2 → ingestr-0.13.4}/styles/Google/Spacing.yml +0 -0
  213. {ingestr-0.13.2 → ingestr-0.13.4}/styles/Google/Spelling.yml +0 -0
  214. {ingestr-0.13.2 → ingestr-0.13.4}/styles/Google/Units.yml +0 -0
  215. {ingestr-0.13.2 → ingestr-0.13.4}/styles/Google/We.yml +0 -0
  216. {ingestr-0.13.2 → ingestr-0.13.4}/styles/Google/Will.yml +0 -0
  217. {ingestr-0.13.2 → ingestr-0.13.4}/styles/Google/WordList.yml +0 -0
  218. {ingestr-0.13.2 → ingestr-0.13.4}/styles/Google/meta.json +0 -0
  219. {ingestr-0.13.2 → ingestr-0.13.4}/styles/Google/vocab.txt +0 -0
  220. {ingestr-0.13.2 → ingestr-0.13.4}/styles/bruin/Ingestr.yml +0 -0
  221. {ingestr-0.13.2 → ingestr-0.13.4}/styles/config/vocabularies/bruin/accept.txt +0 -0
@@ -0,0 +1,79 @@
1
+ name: "Release ingestr on pip and ghcr.io"
2
+
3
+ on:
4
+ push:
5
+ tags:
6
+ - "v*.*.*"
7
+
8
+ env:
9
+ REGISTRY: ghcr.io
10
+ IMAGE_NAME: ${{ github.repository }}
11
+
12
+ jobs:
13
+ tests:
14
+ uses: ./.github/workflows/tests.yml
15
+ pip-release:
16
+ runs-on: ubuntu-latest
17
+ needs: tests
18
+ env:
19
+ TWINE_PASSWORD: ${{ secrets.PYPI_INGESTR_TOKEN }}
20
+ steps:
21
+ - name: checkout
22
+ uses: actions/checkout@v4
23
+ with:
24
+ fetch-depth: 0
25
+ - name: setup python
26
+ uses: actions/setup-python@v5
27
+ with:
28
+ python-version: '3.11'
29
+
30
+ # github actions invoke a fresh shell
31
+ # for each step. This causes us to lose our
32
+ # venv context. So we run all our build commands
33
+ # in a single step to simplify our pipeline.
34
+ - name: build and release
35
+ run: |
36
+ pip install uv
37
+ uv venv
38
+ source .venv/bin/activate
39
+ uv pip install -r requirements-dev.txt
40
+ make build
41
+ make upload-release
42
+
43
+ docker-release:
44
+ needs: tests
45
+ if: github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/tags/')
46
+ runs-on: ubuntu-latest
47
+ permissions:
48
+ contents: read
49
+ packages: write
50
+ steps:
51
+ - name: Checkout repository
52
+ uses: actions/checkout@v4
53
+ - name: Log in to the Container registry
54
+ uses: docker/login-action@v3
55
+ with:
56
+ registry: ${{ env.REGISTRY }}
57
+ username: ${{ github.actor }}
58
+ password: ${{ secrets.GITHUB_TOKEN }}
59
+ - name: Extract metadata (tags, labels) for Docker
60
+ id: meta
61
+ uses: docker/metadata-action@v5
62
+ with:
63
+ images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
64
+
65
+ - name: Set up Docker Buildx
66
+ uses: docker/setup-buildx-action@v3
67
+
68
+ - name: Build and push Docker image
69
+ uses: docker/build-push-action@v5
70
+ with:
71
+ context: .
72
+ platforms: linux/amd64,linux/arm64,linux/arm64/v8
73
+ push: true
74
+ tags: ${{ steps.meta.outputs.tags }}
75
+ labels: ${{ steps.meta.outputs.labels }}
76
+ cache-from: type=gha
77
+ cache-to: type=gha,mode=max
78
+
79
+
@@ -2,9 +2,8 @@ on:
2
2
  push:
3
3
  branches:
4
4
  - main
5
- tags:
6
- - "*"
7
5
  workflow_dispatch: {}
6
+ workflow_call: {}
8
7
  pull_request:
9
8
  branches:
10
9
  - main
@@ -13,11 +12,6 @@ concurrency:
13
12
  group: ${{ github.workflow }}-${{ github.ref }}
14
13
  cancel-in-progress: true
15
14
 
16
- env:
17
- REGISTRY: ghcr.io
18
- IMAGE_NAME: ${{ github.repository }}
19
-
20
-
21
15
  jobs:
22
16
  tests:
23
17
  strategy:
@@ -70,39 +64,3 @@ jobs:
70
64
  run: make test-ci
71
65
  - name: check the formatting
72
66
  run: make lint-ci
73
-
74
- build-and-push-image:
75
- needs: tests
76
- if: github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/tags/')
77
- runs-on: ubuntu-latest
78
- permissions:
79
- contents: read
80
- packages: write
81
- steps:
82
- - name: Checkout repository
83
- uses: actions/checkout@v4
84
- - name: Log in to the Container registry
85
- uses: docker/login-action@v3
86
- with:
87
- registry: ${{ env.REGISTRY }}
88
- username: ${{ github.actor }}
89
- password: ${{ secrets.GITHUB_TOKEN }}
90
- - name: Extract metadata (tags, labels) for Docker
91
- id: meta
92
- uses: docker/metadata-action@v5
93
- with:
94
- images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
95
-
96
- - name: Set up Docker Buildx
97
- uses: docker/setup-buildx-action@v3
98
-
99
- - name: Build and push Docker image
100
- uses: docker/build-push-action@v5
101
- with:
102
- context: .
103
- platforms: linux/amd64,linux/arm64,linux/arm64/v8
104
- push: true
105
- tags: ${{ steps.meta.outputs.tags }}
106
- labels: ${{ steps.meta.outputs.labels }}
107
- cache-from: type=gha
108
- cache-to: type=gha,mode=max
@@ -20,3 +20,4 @@ node_modules
20
20
  *.db
21
21
  *.db.wal
22
22
  *.sql
23
+ ingestr/src/buildinfo.py
@@ -1,6 +1,9 @@
1
+ SHELL := /bin/bash
1
2
  .ONESHELL:
2
3
  .PHONY: test lint format test-ci lint-ci build upload-release setup docker-shell
3
4
 
5
+ BUILDINFO=ingestr/src/buildinfo.py
6
+
4
7
  venv: venv/touchfile
5
8
 
6
9
  venv/touchfile: requirements-dev.txt requirements.txt
@@ -36,7 +39,9 @@ lint-docs:
36
39
  tl: test lint
37
40
 
38
41
  build:
42
+ cat > ${BUILDINFO} <<< "version = \"$$(git describe --tags --abbrev=0)\""
39
43
  rm -rf dist && python3 -m build
44
+ rm -f ${BUILDINFO}
40
45
 
41
46
  upload-release:
42
47
  twine upload --verbose dist/*
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ingestr
3
- Version: 0.13.2
3
+ Version: 0.13.4
4
4
  Summary: ingestr is a command-line application that ingests data from various sources and stores them in any database.
5
5
  Project-URL: Homepage, https://github.com/bruin-data/ingestr
6
6
  Project-URL: Issues, https://github.com/bruin-data/ingestr/issues
@@ -132,7 +132,6 @@ Pull requests are welcome. However, please open an issue first to discuss what y
132
132
  > After cloning `ingestr` make sure to run `make setup` to install githooks.
133
133
 
134
134
  ## Supported sources & destinations
135
-
136
135
  <table>
137
136
  <tr>
138
137
  <th></th>
@@ -142,33 +141,28 @@ Pull requests are welcome. However, please open an issue first to discuss what y
142
141
  <tr>
143
142
  <td colspan="3" style='text-align:center;'><strong>Databases</strong></td>
144
143
  </tr>
145
- <tr>
146
- <td>Postgres</td>
147
- <td>✅</td>
148
- <td>✅</td>
149
- </tr>
150
144
  <tr>
151
145
  <td>BigQuery</td>
152
146
  <td>✅</td>
153
147
  <td>✅</td>
154
148
  </tr>
155
149
  <tr>
156
- <td>Snowflake</td>
157
- <td>✅</td>
150
+ <td>ClickHouse</td>
151
+ <td>❌</td>
158
152
  <td>✅</td>
159
153
  </tr>
160
154
  <tr>
161
- <td>Redshift</td>
155
+ <td>Databricks</td>
162
156
  <td>✅</td>
163
157
  <td>✅</td>
164
158
  </tr>
165
159
  <tr>
166
- <td>Databricks</td>
160
+ <td>DuckDB</td>
167
161
  <td>✅</td>
168
162
  <td>✅</td>
169
163
  </tr>
170
164
  <tr>
171
- <td>DuckDB</td>
165
+ <td>Local CSV file</td>
172
166
  <td>✅</td>
173
167
  <td>✅</td>
174
168
  </tr>
@@ -178,12 +172,12 @@ Pull requests are welcome. However, please open an issue first to discuss what y
178
172
  <td>✅</td>
179
173
  </tr>
180
174
  <tr>
181
- <td>Local CSV file</td>
182
- <td>✅</td>
175
+ <td>MongoDB</td>
183
176
  <td>✅</td>
177
+ <td>❌</td>
184
178
  </tr>
185
179
  <tr>
186
- <td>MongoDB</td>
180
+ <td>MySQL</td>
187
181
  <td>✅</td>
188
182
  <td>❌</td>
189
183
  </tr>
@@ -192,18 +186,28 @@ Pull requests are welcome. However, please open an issue first to discuss what y
192
186
  <td>✅</td>
193
187
  <td>❌</td>
194
188
  </tr>
189
+ <tr>
190
+ <td>Postgres</td>
191
+ <td>✅</td>
192
+ <td>✅</td>
193
+ </tr>
194
+ <tr>
195
+ <td>Redshift</td>
196
+ <td>✅</td>
197
+ <td>✅</td>
198
+ </tr>
195
199
  <tr>
196
200
  <td>SAP Hana</td>
197
201
  <td>✅</td>
198
202
  <td>❌</td>
199
203
  </tr>
200
204
  <tr>
201
- <td>SQLite</td>
205
+ <td>Snowflake</td>
206
+ <td>✅</td>
202
207
  <td>✅</td>
203
- <td>❌</td>
204
208
  </tr>
205
209
  <tr>
206
- <td>MySQL</td>
210
+ <td>SQLite</td>
207
211
  <td>✅</td>
208
212
  <td>❌</td>
209
213
  </tr>
@@ -218,11 +222,21 @@ Pull requests are welcome. However, please open an issue first to discuss what y
218
222
  <td>✅</td>
219
223
  <td>-</td>
220
224
  </tr>
225
+ <tr>
226
+ <td>Apache Kafka</td>
227
+ <td>✅</td>
228
+ <td>-</td>
229
+ </tr>
221
230
  <tr>
222
231
  <td>AppsFlyer</td>
223
232
  <td>✅</td>
224
233
  <td>-</td>
225
234
  </tr>
235
+ <tr>
236
+ <td>App Store</td>
237
+ <td>✅</td>
238
+ <td>-</td>
239
+ </tr>
226
240
  <tr>
227
241
  <td>Asana</td>
228
242
  <td>✅</td>
@@ -243,6 +257,11 @@ Pull requests are welcome. However, please open an issue first to discuss what y
243
257
  <td>✅</td>
244
258
  <td>-</td>
245
259
  </tr>
260
+ <tr>
261
+ <td>Github</td>
262
+ <td>✅</td>
263
+ <td>-</td>
264
+ </tr>
246
265
  <tr>
247
266
  <td>Gorgias</td>
248
267
  <td>✅</td>
@@ -254,7 +273,17 @@ Pull requests are welcome. However, please open an issue first to discuss what y
254
273
  <td>-</td>
255
274
  </tr>
256
275
  <tr>
257
- <td>HubSpot</td>
276
+ <td>Google Ads</td>
277
+ <td>✅</td>
278
+ <td>-</td>
279
+ </tr>
280
+ <tr>
281
+ <td>Google Analytics</td>
282
+ <td>✅</td>
283
+ <td>-</td>
284
+ </tr>
285
+ <tr>
286
+ <td>Intercom</td>
258
287
  <td>✅</td>
259
288
  <td>-</td>
260
289
  </tr>
@@ -263,6 +292,11 @@ Pull requests are welcome. However, please open an issue first to discuss what y
263
292
  <td>✅</td>
264
293
  <td>-</td>
265
294
  </tr>
295
+ <tr>
296
+ <td>LinkedIn Ads</td>
297
+ <td>✅</td>
298
+ <td>-</td>
299
+ </tr>
266
300
  <tr>
267
301
  <td>Notion</td>
268
302
  <td>✅</td>
@@ -288,6 +322,11 @@ Pull requests are welcome. However, please open an issue first to discuss what y
288
322
  <td>✅</td>
289
323
  <td>-</td>
290
324
  </tr>
325
+ <tr>
326
+ <td>TikTok Ads</td>
327
+ <td>✅</td>
328
+ <td>-</td>
329
+ </tr>
291
330
  <tr>
292
331
  <td>Zendesk</td>
293
332
  <td>✅</td>
@@ -68,7 +68,6 @@ Pull requests are welcome. However, please open an issue first to discuss what y
68
68
  > After cloning `ingestr` make sure to run `make setup` to install githooks.
69
69
 
70
70
  ## Supported sources & destinations
71
-
72
71
  <table>
73
72
  <tr>
74
73
  <th></th>
@@ -78,33 +77,28 @@ Pull requests are welcome. However, please open an issue first to discuss what y
78
77
  <tr>
79
78
  <td colspan="3" style='text-align:center;'><strong>Databases</strong></td>
80
79
  </tr>
81
- <tr>
82
- <td>Postgres</td>
83
- <td>✅</td>
84
- <td>✅</td>
85
- </tr>
86
80
  <tr>
87
81
  <td>BigQuery</td>
88
82
  <td>✅</td>
89
83
  <td>✅</td>
90
84
  </tr>
91
85
  <tr>
92
- <td>Snowflake</td>
93
- <td>✅</td>
86
+ <td>ClickHouse</td>
87
+ <td>❌</td>
94
88
  <td>✅</td>
95
89
  </tr>
96
90
  <tr>
97
- <td>Redshift</td>
91
+ <td>Databricks</td>
98
92
  <td>✅</td>
99
93
  <td>✅</td>
100
94
  </tr>
101
95
  <tr>
102
- <td>Databricks</td>
96
+ <td>DuckDB</td>
103
97
  <td>✅</td>
104
98
  <td>✅</td>
105
99
  </tr>
106
100
  <tr>
107
- <td>DuckDB</td>
101
+ <td>Local CSV file</td>
108
102
  <td>✅</td>
109
103
  <td>✅</td>
110
104
  </tr>
@@ -114,12 +108,12 @@ Pull requests are welcome. However, please open an issue first to discuss what y
114
108
  <td>✅</td>
115
109
  </tr>
116
110
  <tr>
117
- <td>Local CSV file</td>
118
- <td>✅</td>
111
+ <td>MongoDB</td>
119
112
  <td>✅</td>
113
+ <td>❌</td>
120
114
  </tr>
121
115
  <tr>
122
- <td>MongoDB</td>
116
+ <td>MySQL</td>
123
117
  <td>✅</td>
124
118
  <td>❌</td>
125
119
  </tr>
@@ -128,18 +122,28 @@ Pull requests are welcome. However, please open an issue first to discuss what y
128
122
  <td>✅</td>
129
123
  <td>❌</td>
130
124
  </tr>
125
+ <tr>
126
+ <td>Postgres</td>
127
+ <td>✅</td>
128
+ <td>✅</td>
129
+ </tr>
130
+ <tr>
131
+ <td>Redshift</td>
132
+ <td>✅</td>
133
+ <td>✅</td>
134
+ </tr>
131
135
  <tr>
132
136
  <td>SAP Hana</td>
133
137
  <td>✅</td>
134
138
  <td>❌</td>
135
139
  </tr>
136
140
  <tr>
137
- <td>SQLite</td>
141
+ <td>Snowflake</td>
142
+ <td>✅</td>
138
143
  <td>✅</td>
139
- <td>❌</td>
140
144
  </tr>
141
145
  <tr>
142
- <td>MySQL</td>
146
+ <td>SQLite</td>
143
147
  <td>✅</td>
144
148
  <td>❌</td>
145
149
  </tr>
@@ -154,11 +158,21 @@ Pull requests are welcome. However, please open an issue first to discuss what y
154
158
  <td>✅</td>
155
159
  <td>-</td>
156
160
  </tr>
161
+ <tr>
162
+ <td>Apache Kafka</td>
163
+ <td>✅</td>
164
+ <td>-</td>
165
+ </tr>
157
166
  <tr>
158
167
  <td>AppsFlyer</td>
159
168
  <td>✅</td>
160
169
  <td>-</td>
161
170
  </tr>
171
+ <tr>
172
+ <td>App Store</td>
173
+ <td>✅</td>
174
+ <td>-</td>
175
+ </tr>
162
176
  <tr>
163
177
  <td>Asana</td>
164
178
  <td>✅</td>
@@ -179,6 +193,11 @@ Pull requests are welcome. However, please open an issue first to discuss what y
179
193
  <td>✅</td>
180
194
  <td>-</td>
181
195
  </tr>
196
+ <tr>
197
+ <td>Github</td>
198
+ <td>✅</td>
199
+ <td>-</td>
200
+ </tr>
182
201
  <tr>
183
202
  <td>Gorgias</td>
184
203
  <td>✅</td>
@@ -190,7 +209,17 @@ Pull requests are welcome. However, please open an issue first to discuss what y
190
209
  <td>-</td>
191
210
  </tr>
192
211
  <tr>
193
- <td>HubSpot</td>
212
+ <td>Google Ads</td>
213
+ <td>✅</td>
214
+ <td>-</td>
215
+ </tr>
216
+ <tr>
217
+ <td>Google Analytics</td>
218
+ <td>✅</td>
219
+ <td>-</td>
220
+ </tr>
221
+ <tr>
222
+ <td>Intercom</td>
194
223
  <td>✅</td>
195
224
  <td>-</td>
196
225
  </tr>
@@ -199,6 +228,11 @@ Pull requests are welcome. However, please open an issue first to discuss what y
199
228
  <td>✅</td>
200
229
  <td>-</td>
201
230
  </tr>
231
+ <tr>
232
+ <td>LinkedIn Ads</td>
233
+ <td>✅</td>
234
+ <td>-</td>
235
+ </tr>
202
236
  <tr>
203
237
  <td>Notion</td>
204
238
  <td>✅</td>
@@ -224,6 +258,11 @@ Pull requests are welcome. However, please open an issue first to discuss what y
224
258
  <td>✅</td>
225
259
  <td>-</td>
226
260
  </tr>
261
+ <tr>
262
+ <td>TikTok Ads</td>
263
+ <td>✅</td>
264
+ <td>-</td>
265
+ </tr>
227
266
  <tr>
228
267
  <td>Zendesk</td>
229
268
  <td>✅</td>
@@ -96,6 +96,7 @@ export default defineConfig({
96
96
  { text: "Airtable", link: "/supported-sources/airtable.md" },
97
97
  { text: "AppsFlyer", link: "/supported-sources/appsflyer.md" },
98
98
  { text: "Apple App Store", link: "/supported-sources/appstore.md"},
99
+ { text: "Applovin", link: "/supported-sources/applovin.md"},
99
100
  { text: "Asana", link: "/supported-sources/asana.md" },
100
101
  { text: "Chess.com", link: "/supported-sources/chess.md" },
101
102
  { text: "DynamoDB", link: "/supported-sources/dynamodb.md" },
@@ -0,0 +1,144 @@
1
+ # Applovin
2
+ [AppLovin](https://www.applovin.com/) Corporation is an American mobile technology company headquartered in Palo Alto, California. AppLovin enables developers of all sizes to market, monetize, analyze and publish their apps through its mobile advertising, marketing, and analytics platforms MAX, AppDiscovery, and SparkLabs.
3
+
4
+ `ingestr` allows ingesting data from [AppDiscovery reporting API](https://developers.applovin.com/en/app-discovery/api/reporting-api/)
5
+
6
+ ## URI Format
7
+
8
+ The URI format for Applovin is as follows:
9
+ ```
10
+ applovin://?api_key=<your_api_key>
11
+ ```
12
+
13
+ URI Parameters:
14
+ * `api_key`. report key generated from your [applovin account](https://www.applovin.com/analytics#keys).
15
+
16
+ ## Setting up Applovin Integration
17
+
18
+ ### Generate a Report Key
19
+ You can generate a report key from your [analytics dashboard](https://www.applovin.com/analytics#keys).
20
+
21
+ ### Example: Loading Publisher Report
22
+
23
+ For this example, we'll assume that:
24
+ * `api_key` is `api_key_0`
25
+
26
+ We will run `ingestr` to save this data to a [duckdb](https://duckdb.org/) database called `report.db` under the table name `public.publisher_report`.
27
+
28
+ ```sh
29
+ ingestr ingest \
30
+ --source-uri "applovin://?api_key=api_key_0
31
+ --source-table "publisher-report" \
32
+ --dest-uri "duckdb:///report.db" \
33
+ --dest-table "public.publisher_report"
34
+ ```
35
+
36
+ ### Example: Incremental loading
37
+
38
+ We will extend the [Loading Publisher Report](#example-loading-publisher-report) example to demonstrate incremental loading.
39
+
40
+ First, we run the example with a start date of `2025-01-01` and an end date of `2025-01-05`
41
+
42
+ ```sh
43
+ ingestr ingest \
44
+ --source-uri "applovin://?api_key=api_key_0
45
+ --source-table "publisher-report" \
46
+ --dest-uri "duckdb:///report.db" \
47
+ --dest-table "public.publisher_report" \
48
+ --interval-start "2025-01-01" \
49
+ --interval-end "2025-01-05"
50
+ ```
51
+
52
+ We can query the database to see which dates the data was ingested for:
53
+
54
+ ```sh
55
+ $ duckdb report.db 'select day from public.publisher_report group by 1'
56
+ ┌────────────┐
57
+ │ day │
58
+ │ date │
59
+ ├────────────┤
60
+ │ 2025-01-01 │
61
+ │ 2025-01-02 │
62
+ │ 2025-01-03 │
63
+ │ 2025-01-04 │
64
+ │ 2025-01-05 │
65
+ └────────────┘
66
+ ```
67
+ Now, we will run `ingestr` again, but we will omit start and end date to demonstrate an incremental load.
68
+
69
+ ```sh
70
+ ingestr ingest \
71
+ --source-uri "applovin://?api_key=api_key_0
72
+ --source-table "publisher-report" \
73
+ --dest-uri "duckdb:///report.db" \
74
+ --dest-table "public.publisher_report"
75
+ ```
76
+
77
+ Now we can check the database again, and we will see that the data was loaded for the rest of the days automatically.
78
+ ```sh
79
+ $ duckdb report.db 'select day from public.publisher_report group by 1'
80
+ ┌────────────┐
81
+ │ day │
82
+ │ date │
83
+ ├────────────┤
84
+ │ 2025-01-01 │
85
+ │ 2025-01-02 │
86
+ │ 2025-01-03 │
87
+ │ 2025-01-04 │
88
+ │ 2025-01-05 │
89
+ │ 2025-01-06 │
90
+ │ . │
91
+ │ . │
92
+ │ . │
93
+ │ 2025-01-28 │
94
+ │ 2025-01-29 │
95
+ │ 2025-01-30 │
96
+ │ 2025-01-31 │
97
+ ├────────────┤
98
+ │ 35 rows │
99
+ └────────────┘
100
+ ```
101
+
102
+ ## Tables
103
+
104
+ | Name | Description |
105
+ | --- | --- |
106
+ | `publisher-report` | Provides daily metrics from the `report` end point using the report_type `publisher` |
107
+ | `advertiser-report` | Provides daily metrics from the `report` end point using the report_type `advertiser`|
108
+ | `advertiser-probabilistic-report` | Provides daily metrics from the `probabilisticReport` end point using the report_type `advertiser` |
109
+ | `advertiser-ska-report` | Provides daily metrics from the `skaReport` end point using the report_type `advertiser` |
110
+
111
+ ## Custom Reports
112
+
113
+ `applovin` source supports custom reports. You can pass a custom report definition to `--source-table` and it will dynamically create a report for you.
114
+
115
+ The format of a custom report looks like the following:
116
+ ```
117
+ custom:{endpoint}:{report_type}:{columns}
118
+ ```
119
+ Where:
120
+ * `{endpoint}` is the API endpoint for applovin reports (one of `report`, `probabilisticReport` or `skaReport`)
121
+ * `{report_type}` is the [report type](https://developers.applovin.com/en/app-discovery/api/reporting-api#required-parameters) (one of `publisher` or `advertiser`)
122
+ * `{columns}` are the [columns](https://developers.applovin.com/en/app-discovery/api/reporting-api#allowed-publisher-columns) of the given report type.
123
+
124
+
125
+ ### Custom Report Example
126
+ For this example, we will ingest data from `report` end point with the report type `publisher`.
127
+
128
+ We want to obtain the following columns:
129
+ * ad_type
130
+ * clicks
131
+ * country
132
+
133
+ To achieve this, we can pass the custom report defintion in `--source-table`
134
+
135
+ ```sh
136
+ ingestr ingest \
137
+ --source-uri "applovin://?api_key=api_key_0
138
+ --source-table "custom:report:publisher:ad_type,clicks,country" \
139
+ --dest-uri "duckdb:///report.db" \
140
+ --dest-table "public.custom_report"
141
+ ```
142
+
143
+ > [!NOTE]
144
+ > The `day` column is automatically added to any custom report if it is not specified in the custom report definition.