singer-io / tap-appsflyer Goto Github PK
View Code? Open in Web Editor NEWA Singer.io tap for extracting data from the AppsFlyer API
License: GNU Affero General Public License v3.0
A Singer.io tap for extracting data from the AppsFlyer API
License: GNU Affero General Public License v3.0
Appsflyer will be removing API V1 tokens on August 31. This banner appears when logged in to Appsflyer:
Caution!
API token V1 will be removed on August 31, 2023. Please replace all instances of API token V1 with our new API token V2 and update the relevant APIs.
The endpoint URLs are different:
https://hq.appsflyer.com/export/app-id/installs_report/v5?
https://hq1.appsflyer.com/api/raw-data/export/app/app-id/installs_report/v5?
These probably need to change:
tap-appsflyer/tap_appsflyer/__init__.py
Lines 32 to 36 in 744a803
The authentication method also needs to change (i.e. passing a token in the header instead of in the URL):
tap-appsflyer/tap_appsflyer/__init__.py
Line 158 in 744a803
Hi, I've created stichdata connector AppsFlyes to BigQuery
There is no successful attemps.
Extraction Jobs logs:
2019-07-30 21:03:46,747Z main - INFO Running tap-appsflyer version 0.0.11 and target-stitch version 1.8.1
2019-07-30 21:03:46,861Z main - INFO Starting tap: tap-env/bin/tap-appsflyer --config /tmp/tap_config.json --state /tmp/tap_state.json
2019-07-30 21:03:46,863Z main - INFO Starting target: target-env/bin/target-stitch --config /tmp/target_config.json
2019-07-30 21:03:47,026Z tap - INFO do_sync()
2019-07-30 21:03:47,027Z tap - INFO Starting sync. Will sync these streams: ['installs', 'in_app_events']
2019-07-30 21:03:47,027Z tap - INFO Syncing installs
2019-07-30 21:03:47,029Z tap - INFO GET https://hq.appsflyer.com/export/583402384/installs_report/v5?to=2019-07-30+21%3A00&api_token=....................................&from=2019-06-30+21%3A00
2019-07-30 21:03:47,088Z target - INFO Using Stitch import URL https://api.stitchdata.com/v2/import/batch
2019-07-30 21:03:47,713Z tap - INFO STATS: {"duration": 0.6835598945617676, "status": "succeeded", "http_status_code": 404, "source": "installs"}
2019-07-30 21:03:47,713Z tap - ERROR GET https://hq.appsflyer.com/export/583402384/installs_report/v5?to=2019-07-30+21%3A00&api_token=....................................&from=2019-06-30+21%3A00 [404 - b'\n\n\n\n <title>AppsFlyer - Page Not Found</title>\n \n \n \n \n \n \n\n\n\n
Most taps now allow you to run them in discovery mode like so:
tap-appsflyer -c config.json --discover > catalog.json
Which results in the schema (catalogue) being output.
The tap can then be run in sync mode with the schema as an input like this
tap-appsflyer -c config.json --catalog catalog.json
Although the schema is fixed and therefore hardcoded, it would be nice to be able to rename the stream which is only possible if we can input our own catalogue object.
Traceback (most recent call last):
File "/Users/vikash.kumar/.virtualenvs/tap-appsflyer/bin/tap-appsflyer", line 11, in
load_entry_point('tap-appsflyer==0.0.11', 'console_scripts', 'tap-appsflyer')()
File "/Users/vikash.kumar/.virtualenvs/tap-appsflyer/lib/python3.5/site-packages/tap_appsflyer/init.py", line 462, in main
do_sync()
File "/Users/vikash.kumar/.virtualenvs/tap-appsflyer/lib/python3.5/site-packages/tap_appsflyer/init.py", line 444, in do_sync
stream.sync() # pylint: disable=not-callable
File "/Users/vikash.kumar/.virtualenvs/tap-appsflyer/lib/python3.5/site-packages/tap_appsflyer/init.py", line 280, in sync_installs
record = xform(row, schema)
File "/Users/vikash.kumar/.virtualenvs/tap-appsflyer/lib/python3.5/site-packages/tap_appsflyer/init.py", line 95, in xform
return transform.transform(record, schema)
File "/Users/vikash.kumar/.virtualenvs/tap-appsflyer/lib/python3.5/site-packages/singer/transform.py", line 112, in transform
raise Exception("Errors at paths {} in data {} for schema {}".format(error_paths, data, schema))
Exception: Errors at paths [['af_c_id'], ['customer_user_id'], ['af_ad_type'], ['contributor1_touch_type'], ['af_sub5'], ['af_sub1'], ['af_keywords'], ['af_sub3'], ['af_cost_currency'], ['af_adset_id'], ['contributor3_media_source'], ['af_reengagement_window'], ['af_ad'], ['contributor3_campaign'], ['af_ad_id'], ['contributor2_af_prt'], ['idfv'], ['event_revenue_usd'], ['contributor1_touch_time'], ['retargeting_conversion_type'], ['contributor1_media_source'], ['contributor2_touch_time'], ['contributor3_touch_type'], ['contributor3_af_prt'], ['attributed_touch_time'], ['contributor2_campaign'], ['af_cost_value'], ['af_sub2'], ['event_revenue_currency'], ['idfa'], ['af_sub4'], ['http_referrer'], ['contributor2_touch_type'], ['af_sub_siteid'], ['contributor1_af_prt'], ['af_prt'], ['contributor2_media_source'], ['af_cost_model'], ['contributor1_campaign'], ['contributor3_touch_time'], ['event_time'], ['event_value'], ['event_revenue'], ['af_channel'], ['android_id'], ['install_time']] in data {'is_receipt_validated': None, 'af_c_id': None, 'customer_user_id': None, 'event_source': 'SDK', 'af_ad_type': None,
Hi,
I tried using the apps flyer integration stitch and I am constantly getting errors. Can anyone please advise on the issue?
Thanks
Rishav
2022-05-09 18:42:55,568Z main - INFO Running tap-appsflyer version 0.0.13 and target-stitch version 3.2.1 2022-05-09 18:42:56,696Z main - INFO [smart-services] building smart service producer: topic( com.stitchdata.extractionJobStarted ), use_ssl( true ) 2022-05-09 18:42:56,703Z main - INFO [smart-services] building smart service producer: topic( com.stitchdata.extractionJobFinished ), use_ssl( true ) 2022-05-09 18:42:56,709Z main - INFO [smart-services] building smart service producer: topic( com.stitchdata.streamRecordCount ), use_ssl( true ) 2022-05-09 18:42:57,741Z main - INFO [smart-services] event successfully sent to kafka: com.stitchdata.extractionJobStarted [49] at offset None 2022-05-09 18:42:57,762Z main - INFO Current state: {} 2022-05-09 18:42:57,762Z main - INFO Starting tap: tap-env/bin/tap-appsflyer --config /tmp/tap_config.json --state /tmp/tap_state.json 2022-05-09 18:42:57,766Z main - INFO Starting target: target-env/bin/target-stitch --config /tmp/target_config.json 2022-05-09 18:42:57,905Z tap - INFO do_sync() 2022-05-09 18:42:57,905Z tap - INFO Starting sync. Will sync these streams: ['installs', 'in_app_events'] 2022-05-09 18:42:57,905Z tap - INFO Syncing installs 2022-05-09 18:42:57,907Z tap - INFO GET https://hq.appsflyer.com/export/[email protected]/installs_report/v5?from=2022-03-07+00%3A00&to=2022-04-06+00%3A00&api_token=.................................... 2022-05-09 18:42:58,154Z target - INFO Using batch_size_prefernces of {'full_table_streams': [], 'batch_size_preference': None, 'user_batch_size_preference': None} 2022-05-09 18:42:58,823Z tap - INFO STATS: {"duration": 0.915264368057251, "status": "succeeded", "http_status_code": 404, "source": "installs"} 2022-05-09 18:42:58,823Z tap - ERROR GET https://hq.appsflyer.com/export/[email protected]/installs_report/v5?from=2022-03-07+00%3A00&to=2022-04-06+00%3A00&api_token=.................................... [404 - b'<!DOCTYPE html>\n<html lang="en">\n\n<head>\n <title>AppsFlyer - Page Not Found</title>\n <meta charset="UTF-8">\n <meta name="viewport" content="width=device-width, initial-scale=1">\n <link rel="shortcut icon" href="https://cdn.appsflyer.com/af-statics/images/favicon.ico" />\n <!-- other browsers -->\n <link rel="icon" href="https://cdn.appsflyer.com/af-statics/images/favicon.ico" />\n <link href="https://cdn.appsflyer.com/af-statics/images/error-pages.css" rel="stylesheet">\n</head>\n\n<body>\n <div class="error-page error-404-page">\n <div class="error-header">\n <a href="/apps/myapps"></a>\n </div>\n <div class="error-content">\n <div class="error-inner">\n <div>\n <h1>OOPS...</h1>\n <h2>\n <div>The page you requested</div>\n <div>was not found</div>\n </h2>\n <div>\n <a href="/apps/myapps">Back To My Apps ></a>\n </div>\n <div class="error-illustration"></div>\n </div>\n </div>\n </div>\n </div>\n</body>\n\n</html>'] 2022-05-09 18:42:58,843Z target - INFO Requests complete, stopping loop 2022-05-09 18:42:58,877Z main - INFO Target exited normally with status 0 2022-05-09 18:43:00,260Z main - INFO [smart-services] event successfully sent to kafka: com.stitchdata.extractionJobFinished [8] at offset None 2022-05-09 18:43:00,263Z main - INFO No tunnel subprocess to tear down 2022-05-09 18:43:00,264Z main - INFO Exit status is: Tap failed with code 1. Target succeeded.
Encountering an AttributeError when the StitchData service attempts to transform a certain row from our AppsFlyer in-app events.
Here are the logs:
2018-08-14 05:03:59,908Z main - INFO Running tap-appsflyer version 0.0.7 and target-stitch version 1.7.4 2018-08-14 05:04:00,061Z main - DEBUG Getting initial state 2018-08-14 05:04:00,121Z main - INFO Starting tap: tap-env/bin/tap-appsflyer --config /tmp/tap_config.json --state /tmp/tap_state.json 2018-08-14 05:04:00,124Z main - INFO Starting target: target-env/bin/target-stitch --config /tmp/target_config.json 2018-08-14 05:04:00,404Z tap - INFO do_sync() 2018-08-14 05:04:00,404Z tap - INFO Starting sync. Will sync these streams: ['in_app_events'] 2018-08-14 05:04:00,404Z tap - INFO Syncing in_app_events 2018-08-14 05:04:00,408Z tap - INFO Syncing data from 2018-06-04 17:17:22 to 2018-06-14 17:17:22 2018-08-14 05:04:00,413Z tap - INFO GET https://hq.appsflyer.com/export/id1293721589/in_app_events_report/v5?from=2018-06-04+17%3A17&api_token=....................................&to=2018-06-14+17%3A17 2018-08-14 05:04:00,504Z target - INFO Using Stitch import URL https://api.stitchdata.com/v2/import/batch 2018-08-14 05:04:18,813Z tap - INFO STATS: {"http_status_code": 200, "source": "in_app_events", "duration": 18.399158000946045, "status": "succeeded"} 2018-08-14 05:04:18,814Z tap - Traceback (most recent call last): 2018-08-14 05:04:18,814Z tap - File "tap-env/bin/tap-appsflyer", line 11, in <module> 2018-08-14 05:04:18,814Z tap - sys.exit(main()) 2018-08-14 05:04:18,814Z tap - File "/code/orchestrator/tap-env/lib/python3.5/site-packages/tap_appsflyer/__init__.py", line 458, in main 2018-08-14 05:04:18,814Z tap - do_sync() 2018-08-14 05:04:18,814Z tap - File "/code/orchestrator/tap-env/lib/python3.5/site-packages/tap_appsflyer/__init__.py", line 440, in do_sync 2018-08-14 05:04:18,814Z tap - stream.sync() # pylint: disable=not-callable 2018-08-14 05:04:18,814Z tap - File "/code/orchestrator/tap-env/lib/python3.5/site-packages/tap_appsflyer/__init__.py", line 402, in sync_in_app_events 2018-08-14 05:04:18,814Z tap - record = xform(row, schema) 2018-08-14 05:04:18,815Z tap - File "/code/orchestrator/tap-env/lib/python3.5/site-packages/tap_appsflyer/__init__.py", line 89, in xform 2018-08-14 05:04:18,815Z tap - xform_boolean_field(record, "wifi") 2018-08-14 05:04:18,815Z tap - File "/code/orchestrator/tap-env/lib/python3.5/site-packages/tap_appsflyer/__init__.py", line 75, in xform_boolean_field 2018-08-14 05:04:18,815Z tap - if record[field_name].lower() == "TRUE".lower(): 2018-08-14 05:04:18,815Z tap - AttributeError: 'NoneType' object has no attribute 'lower' 2018-08-14 05:04:18,839Z target - INFO Exiting normally 2018-08-14 05:04:18,875Z main - INFO Target exited normally with status 0 2018-08-14 05:04:18,876Z main - INFO Exit status is: Tap failed with code 1. Target succeeded.
Our data probably has an event with a blank boolean field. Is this something that can be accounted for and handled in the tap, or should we try to remove this event from appsflyer entirely?
The code in question:
tap-appsflyer/tap_appsflyer/__init__.py
Line 75 in 3acfdbd
Pardon my ignorance - How do I get the cost & revenue data? it doesn't look like its populating from this tap?
2018-03-26 09:10:48,727Z main - INFO Running tap-appsflyer version 0.0.1 and target-stitch version 1.7.0
2018-03-26 09:10:48,866Z main - DEBUG Getting initial state
2018-03-26 09:10:48,939Z main - INFO Starting tap: tap-env/bin/tap-appsflyer --config /tmp/tap_config.json --state /tmp/tap_state.json
2018-03-26 09:10:48,960Z main - INFO Starting target: target-env/bin/target-stitch --config /tmp/target_config.json
2018-03-26 09:10:49,327Z tap - INFO do_sync()
2018-03-26 09:10:49,328Z tap - INFO Starting sync. Will sync these streams: ['installs', 'in_app_events']
2018-03-26 09:10:49,328Z tap - INFO Syncing installs
2018-03-26 09:10:49,358Z tap - INFO GET https://hq.appsflyer.com/export/id1022393446/installs_report/v5?from=2018-03-01+00%3A00&api_token=....................................&to=2018-03-26+09%3A10
2018-03-26 09:10:49,505Z target - INFO Using Stitch import URL https://api.stitchdata.com/v2/import/batch
2018-03-26 09:11:06,293Z tap - INFO STATS: {"duration": 16.942935466766357, "status": "succeeded", "http_status_code": 200, "source": "installs"}
2018-03-26 09:11:06,293Z tap - INFO Syncing in_app_events
2018-03-26 09:11:06,295Z main - INFO State update: adding this_stream = "installs"
2018-03-26 09:11:06,295Z main - DEBUG Saving state: {'this_stream': 'installs'}
2018-03-26 09:11:06,297Z tap - INFO GET https://hq.appsflyer.com/export/id1022393446/in_app_events_report/v5?from=2018-03-01+00%3A00&api_token=....................................&to=2018-03-26+09%3A11
2018-03-26 09:12:58,589Z tap - INFO STATS: {"duration": 112.29382634162903, "status": "succeeded", "http_status_code": 200, "source": "in_app_events"}
2018-03-26 09:12:58,604Z tap - Traceback (most recent call last):
2018-03-26 09:12:58,604Z tap - File "tap-env/bin/tap-appsflyer", line 11, in
2018-03-26 09:12:58,604Z tap - sys.exit(main())
2018-03-26 09:12:58,604Z tap - File "/code/orchestrator/tap-env/lib/python3.5/site-packages/tap_appsflyer/init.py", line 473, in main
2018-03-26 09:12:58,604Z tap - do_sync()
2018-03-26 09:12:58,605Z tap - File "/code/orchestrator/tap-env/lib/python3.5/site-packages/tap_appsflyer/init.py", line 455, in do_sync
2018-03-26 09:12:58,605Z tap - stream.sync() # pylint: disable=not-callable
2018-03-26 09:12:58,605Z tap - File "/code/orchestrator/tap-env/lib/python3.5/site-packages/tap_appsflyer/init.py", line 421, in sync_in_app_events
2018-03-26 09:12:58,605Z tap - record = xform(row, schema)
2018-03-26 09:12:58,605Z tap - File "/code/orchestrator/tap-env/lib/python3.5/site-packages/tap_appsflyer/init.py", line 91, in xform
2018-03-26 09:12:58,605Z tap - return transform.transform(record, schema)
2018-03-26 09:12:58,605Z tap - File "/code/orchestrator/tap-env/lib/python3.5/site-packages/singer/transform.py", line 112, in transform
2018-03-26 09:12:58,606Z tap - raise Exception("Errors at paths {} in data {} for schema {}".format(error_paths, data, schema))
2018-03-26 09:12:58,606Z tap - Exception: Errors at paths [['contributor2_touch_type'], ['af_cost_value'], ['af_ad_type'], ['af_sub3'], ['advertising_id'], ['contributor3_media_source'], ['contributor1_af_prt'], ['contributor1_touch_time'], ['contributor1_touch_type'], ['af_cost_currency'], ['af_siteid'], ['contributor1_campaign'], ['af_sub2'], ['contributor3_af_prt'], ['http_referrer'], ['contributor3_touch_time'], ['imei'], ['af_keywords'], ['carrier'], ['af_sub5'], ['af_sub4'], ['original_url'], ['contributor2_media_source'], ['af_sub_siteid'], ['af_cost_model'], ['android_id'], ['af_sub1'], ['contributor2_campaign'], ['customer_user_id'], ['retargeting_conversion_type'], ['contributor3_campaign'], ['operator'], ['contributor1_media_source'], ['af_prt'], ['contributor2_touch_time'], ['contributor2_af_prt'], ['af_reengagement_window'], ['contributor3_touch_type']] in data {'contributor2_touch_type': None, 'af_cost_value': None, 'af_ad_type': None, 'af_sub3': None, 'is_primary_attribution': 'true', 'region': 'AS', 'idfa': 'ED243952-62D2-4D37-A3A3-3E872468EFC9', 'advertising_id': None, 'city': 'As Sabkhah', 'contributor3_media_source': None, 'af_c_id': '6080247525522', 'contributor1_af_prt': None, 'attributed_touch_type': 'impression', 'contributor1_touch_time': None, 'os_version': '11.2.6', 'is_retargeting': False, 'ip': '5.31.232.114', 'event_revenue_currency': 'EUR', 'contributor1_touch_type': None, 'af_cost_currency': None, 'app_version': '3.5.3', 'dma': 'None', 'device_type': 'iPhone X', 'app_name': 'Bsit, the childcare app', 'af_siteid': None, 'contributor1_campaign': None, 'event_value': '{"af_revenue":1.75,"af_event_start":"2018-03-01T07:00:40.555Z","af_longitude":4.4780842999999777,"af_customer_user_id":"5a5eb9c9bc9b350014690a5a","af_event_end":"2018-03-01T11:00:40.555Z","af_latitude":50.828281099999991,"af_order_id":"5a89f26b55e4760014096c6e","af_price":28.84,"af_currency":"EUR"}', 'af_sub2': None, 'contributor3_af_prt': None, 'http_referrer': None, 'contributor3_touch_time': None, 'imei': None, 'event_source': 'SDK', 'af_keywords': None, 'carrier': None, 'af_ad_id': '6080247526522', 'af_sub5': None, 'af_adset': 'AllParents_All_en - Instagram', 'af_channel': 'Instagram', 'attributed_touch_time': '2018-01-16 17:50:15', 'af_adset_id': '6080247527722', 'install_time': '2018-01-17 02:49:27', 'user_agent': 'Bsit/3.5.3 CFNetwork/894 Darwin/17.4.0', 'af_sub4': None, 'appsflyer_id': '1516160951593-9081132', 'original_url': None, 'contributor2_media_source': None, 'af_sub_siteid': None, 'bundle_id': 'com.togetair.aribsit', 'af_cost_model': None, 'event_revenue': '1.75', 'wifi': False, 'android_id': None, 'idfv': 'BBC032A0-403A-479C-B0CA-7FA8801CD437', 'event_revenue_usd': '2.133962', 'af_sub1': None, 'postal_code': 'None', 'media_source': 'Facebook Ads', 'af_attribution_lookback': '1d', 'contributor2_campaign': None, 'country_code': 'AE', 'customer_user_id': '5a5eb9c9bc9b350014690a5a', 'retargeting_conversion_type': None, 'is_receipt_validated': None, 'contributor3_campaign': None, 'event_time': '2018-03-01 07:10:36', 'operator': None, 'campaign': 'Boost_97%_Parents&Sitters_All___SPLIT DB', 'contributor1_media_source': None, 'app_id': 'id1022393446', 'state': 'DU', 'af_prt': None, 'contributor2_touch_time': None, 'contributor2_af_prt': None, 'platform': 'ios', 'sdk_version': 'v4.5.9', 'language': 'en-BE', 'af_reengagement_window': None, 'contributor3_touch_type': None, 'event_name': 'af_finished', 'af_ad': 'Publication Dessin afterschool_en'} for schema {'type': 'object', 'properties': {'contributor2_touch_type': {'type': ['string', 'null']}, 'af_cost_value': {'type': ['string', 'null']}, 'is_retargeting': {'type': ['boolean', 'null']}, 'af_sub3': {'type': ['string', 'null']}, 'is_primary_attribution': {'type': ['boolean', 'null']}, 'region': {'type': ['string', 'null']}, 'idfa': {'type': ['string', 'null']}, 'imei': {'type': ['string', 'null']}, 'event_time': {'type': ['string', 'null'], 'format': 'date-time'}, 'city': {'type': ['string', 'null']}, 'af_c_id': {'type': ['string', 'null']}, 'af_ad_type': {'type': ['string', 'null']}, 'attributed_touch_type': {'type': ['string', 'null']}, 'contributor1_touch_time': {'type': ['string', 'null']}, 'os_version': {'type': ['string', 'null']}, 'ip': {'type': ['string', 'null']}, 'app_id': {'type': ['string', 'null']}, 'postal_code': {'type': ['string', 'null']}, 'contributor1_touch_type': {'type': ['string', 'null']}, 'af_cost_currency': {'type': ['string', 'null']}, 'app_version': {'type': ['string', 'null']}, 'dma': {'type': ['string', 'null']}, 'device_type': {'type': ['string', 'null']}, 'app_name': {'type': ['string', 'null']}, 'contributor2_media_source': {'type': ['string', 'null']}, 'contributor1_campaign': {'type': ['string', 'null']}, 'event_value': {'type': ['string', 'null']}, 'af_sub2': {'type': ['string', 'null']}, 'contributor3_af_prt': {'type': ['string', 'null']}, 'http_referrer': {'type': ['string', 'null'], 'format': 'uri'}, 'contributor3_touch_time': {'type': ['string', 'null']}, 'sdk_version': {'type': ['string', 'null']}, 'af_keywords': {'type': ['string', 'null']}, 'is_receipt_validated': {'type': ['boolean', 'null']}, 'af_ad_id': {'type': ['string', 'null']}, 'af_sub5': {'type': ['string', 'null']}, 'af_adset': {'type': ['string', 'null']}, 'af_channel': {'type': ['string', 'null']}, 'attributed_touch_time': {'type': ['string', 'null'], 'format': 'date-time'}, 'af_adset_id': {'type': ['string', 'null']}, 'install_time': {'type': ['string', 'null'], 'format': 'date-time'}, 'user_agent': {'type': ['string', 'null']}, 'af_sub4': {'type': ['string', 'null']}, 'appsflyer_id': {'type': ['string', 'null']}, 'event_source': {'type': ['string', 'null']}, 'event_revenue_currency': {'type': ['string', 'null']}, 'event_revenue': {'type': ['string', 'null']}, 'af_siteid': {'type': ['string', 'null']}, 'af_sub_siteid': {'type': ['string', 'null']}, 'bundle_id': {'type': ['string', 'null']}, 'af_cost_model': {'type': ['string', 'null']}, 'original_url': {'type': ['string', 'null'], 'format': 'uri'}, 'wifi': {'type': ['boolean', 'null']}, 'android_id': {'type': ['string', 'null']}, 'idfv': {'type': ['string', 'null']}, 'event_revenue_usd': {'type': ['string', 'null']}, 'af_sub1': {'type': ['string', 'null']}, 'advertising_id': {'type': ['string', 'null']}, 'media_source': {'type': ['string', 'null']}, 'af_attribution_lookback': {'type': ['string', 'null']}, 'contributor2_campaign': {'type': ['string', 'null']}, 'country_code': {'type': ['string', 'null']}, 'customer_user_id': {'type': ['integer', 'null']}, 'retargeting_conversion_type': {'type': ['string', 'null']}, 'event_name': {'type': ['string', 'null']}, 'contributor3_campaign': {'type': ['string', 'null']}, 'contributor3_media_source': {'type': ['string', 'null']}, 'operator': {'type': ['string', 'null']}, 'campaign': {'type': ['string', 'null']}, 'contributor1_media_source': {'type': ['string', 'null']}, 'state': {'type': ['string', 'null']}, 'af_prt': {'type': ['string', 'null']}, 'contributor2_touch_time': {'type': ['string', 'null']}, 'contributor2_af_prt': {'type': ['string', 'null']}, 'contributor1_af_prt': {'type': ['string', 'null']}, 'platform': {'type': ['string', 'null']}, 'language': {'type': ['string', 'null']}, 'af_reengagement_window': {'type': ['string', 'null']}, 'contributor3_touch_type': {'type': ['string', 'null']}, 'carrier': {'type': ['string', 'null']}, 'af_ad': {'type': ['string', 'null']}}}
2018-03-26 09:12:58,638Z target - INFO Exiting normally
2018-03-26 09:12:58,682Z main - INFO Target exited normally with status 0
2018-03-26 09:12:58,684Z main - INFO Exit status is: Tap failed with code 1. Target succeeded.
I am only seeing installs from Googleadwords_int in my installs report. Installs from media source: Facebook ads is not showing up. I can see facebook installs in my Appsflyer dashboard. Any clue why this is not showing up in this report?
Extraction logs:
2019-01-02 08:04:10,777Z main - INFO Running tap-appsflyer version 0.0.11 and target-stitch version 1.8.1
2019-01-02 08:04:10,898Z main - INFO Starting tap: tap-env/bin/tap-appsflyer --config /tmp/tap_config.json --state /tmp/tap_state.json
2019-01-02 08:04:10,900Z main - INFO Starting target: target-env/bin/target-stitch --config /tmp/target_config.json
2019-01-02 08:04:11,062Z tap - INFO do_sync()
2019-01-02 08:04:11,062Z tap - INFO Starting sync. Will sync these streams: ['installs', 'in_app_events']
2019-01-02 08:04:11,063Z tap - INFO Syncing installs
2019-01-02 08:04:11,064Z tap - INFO GET https://hq.appsflyer.com/export/nl.tellow.app/installs_report/v5?api_token=....................................&from=2019-01-02+01%3A59&to=2019-01-02+08%3A04
2019-01-02 08:04:11,139Z target - INFO Using Stitch import URL https://api.stitchdata.com/v2/import/batch
2019-01-02 08:04:25,090Z tap - INFO STATS: {"status": "succeeded", "source": "installs", "http_status_code": 200, "duration": 14.025520086288452}
2019-01-02 08:04:25,100Z tap - INFO Syncing in_app_events
2019-01-02 08:04:25,101Z tap - INFO Syncing data from 2019-01-01 23:50:37 to 2019-01-02 08:04:25.101130
2019-01-02 08:04:25,101Z target - INFO Sending batch with 16 messages for table installs to https://api.stitchdata.com/v2/import/batch
2019-01-02 08:04:25,101Z tap - INFO GET https://hq.appsflyer.com/export/nl.tellow.app/in_app_events_report/v5?api_token=....................................&from=2019-01-01+23%3A50&to=2019-01-02+08%3A04
2019-01-02 08:04:25,368Z main - INFO State update: adding in_app_events = "2019-01-01T23:50:37Z"
2019-01-02 08:04:25,368Z main - INFO State update: adding installs = "2019-01-02T07:02:19Z"
2019-01-02 08:04:25,368Z main - INFO State update: adding this_stream = "installs"
2019-01-02 08:04:49,985Z tap - INFO STATS: {"status": "succeeded", "source": "in_app_events", "http_status_code": 200, "duration": 24.883780479431152}
2019-01-02 08:04:49,988Z tap - INFO Sync completed
2019-01-02 08:04:50,024Z target - INFO Sending batch with 5 messages for table in_app_events to https://api.stitchdata.com/v2/import/batch
2019-01-02 08:04:50,164Z main - INFO State update: changing in_app_events from "2019-01-01T23:50:37Z" to "2019-01-02T06:49:20Z"
2019-01-02 08:04:50,164Z main - INFO State update: changing this_stream from "installs" to null
2019-01-02 08:04:50,165Z target - INFO Exiting normally
2019-01-02 08:04:50,219Z main - INFO Target exited normally with status 0
2019-01-02 08:04:50,222Z main - INFO Exit status is: Tap succeeded. Target succeeded.
Hello Everyone,
I see that the AppsFlyer tap is now capable of syncing organic installs and that it's now officially tagged on the master branch.
#34
However this new capability is behind a CONFIG variable, that is not available on the Stitch integration.
Does anyone know how can I make this config value available on the Stitch integration, or if there is a workaround in order to get this working on Stitch?
Thank you
ENDPOINTS = {
"installs": "/export/{app_id}/installs_report/v5",
"in_app_events": "/export/{app_id}/in_app_events_report/v5"
}
Doesn't have "organic installations reports".
The organic installations reports is a premium feature in appsflyer but if you have it enabled it would be nice to have this data.
It'd be great if we can include the partners daily report in the sync.
We're getting this log error every day. Is there any way we can fix the malformed request ASAP?
2018-09-04 13:57:15,555Z main - INFO Running tap-appsflyer version 0.0.8 and target-stitch version 1.7.4
2018-09-04 13:57:15,724Z main - DEBUG Getting initial state
2018-09-04 13:57:15,782Z main - INFO Starting tap: tap-env/bin/tap-appsflyer --config /tmp/tap_config.json --state /tmp/tap_state.json
2018-09-04 13:57:15,802Z main - INFO Starting target: target-env/bin/target-stitch --config /tmp/target_config.json
2018-09-04 13:57:16,337Z tap - INFO do_sync()
2018-09-04 13:57:16,341Z tap - INFO Starting sync. Will sync these streams: ['in_app_events']
2018-09-04 13:57:16,343Z tap - INFO Syncing in_app_events
2018-09-04 13:57:16,352Z tap - INFO Syncing data from 2018-09-04 01:56:40 to 2018-09-04 13:57:16.345161
2018-09-04 13:57:16,365Z tap - INFO GET https://hq.appsflyer.com/export/com.wayup_rn/in_app_events_report/v5?from=2018-09-04+01%3A56&to=2018-09-04+13%3A57&api_token=....................................
2018-09-04 13:57:16,450Z target - INFO Using Stitch import URL https://api.stitchdata.com/v2/import/batch
2018-09-04 13:57:16,946Z tap - INFO STATS: {"source": "in_app_events", "duration": 0.5804538726806641, "status": "succeeded", "http_status_code": 400}
2018-09-04 13:57:16,947Z tap - ERROR GET https://hq.appsflyer.com/export/com.wayup_rn/in_app_events_report/v5?from=2018-09-04+01%3A56&to=2018-09-04+13%3A57&api_token=.................................... [400 - b'400 Bad Request\n\nThe server could not comply with the request since it is either malformed or otherwise incorrect.\n\n\nReport timezone: GMT | Max line count: 200K | Oldest available data: 90 Days ago. Max requests 12 per day per app, 60 per account in total.\n\n']
2018-09-04 13:57:16,995Z target - INFO Exiting normally
2018-09-04 13:57:17,090Z main - INFO Target exited normally with status 0
2018-09-04 13:57:17,099Z main - INFO Exit status is: Tap failed with code 1. Target succeeded.
It seems that PR #19 has been merged (woohoo!) but the latest tag is v0.0.13
which doesn't include this feature. Can we bump the tag so this improvement is made available in the master
branch? Thanks!
I have copied the full log output from a customer's Appsflyer integration below. Calls to the installs_report API return a bad request error.
INFO Starting sync. Will sync these streams: ['installs', 'in_app_events'] 2017-08-28T19:57:24.662309569Z INFO tap_log - INFO Syncing installs 2017-08-28T19:57:24.669389603Z INFO tap_log - INFO GET https://hq.appsflyer.com/export/id728659261/installs_report/v5?from=2017-06-27+00%3A53&to=2017-07-27+00%3A53&api_token=.................................... 2017-08-28T19:57:25.157900129Z INFO tap_log - INFO STATS: {"status": "succeeded", "duration": 0.48760128021240234, "source": "installs", "http_status_code": 400} 2017-08-28T19:57:25.157944406Z INFO tap_log - ERROR GET https://hq.appsflyer.com/export/id728659261/installs_report/v5?from=2017-06-27+00%3A53&to=2017-07-27+00%3A53&api_token=.................................... [400 - b'400 Bad Request\n\nThe server could not comply with the request since it is either malformed or otherwise incorrect.\n\n\nReport timezone: GMT | Max line count: 200K | Oldest available data: 90 Days ago. Max requests 24 per day per app, 120 per account in total.\n\n'] 2017-08-28T19:57:25.184780307Z DEBUG tap_log - Thread terminating
There currently does not appear to be support for pulling in the organic_in_app_events report from appsflyer mentioned here by appsflyer. This results in the data pulled from appsflyer via stitch being materially incomplete.
Is it possible to add this?
Hello, we're having some issues with the Appsflyer integration. Around 6th June, just the installs report, and only installs (events is still running successfully), halved, and then stopped on the 16th June.
The extraction logs, but also the dialog in the settings tab, show it's related to dates and times that are being sent into Appsflyer's API (see attached screenshot).
It appears as if Appsflyer have recently changed their API policy too
https://support.appsflyer.com/hc/en-us/articles/207034366-API-Policy
but this is after our issues started.
If someone could please advise on what's causing this issue that would be great.
Thanks.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.