Facebook Marketing source - Removing end date causes error

Hi,

In the Facebook Marketing source settings, after entering a start and end date, if you remove the end date (which is not required), you get an error:

The connection tests failed.
The provided configuration does not fulfill the specification. Errors: json schema validation failed when comparing the data to the json schema. Errors: $.end_date: does not match the regex pattern ^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$, $.end_date: is an invalid date-time Schema: { "type" : "object", "title" : "Source Facebook Marketing", "required" : [ "account_id", "start_date", "access_token" ], "properties" : { "end_date" : { "type" : "string", "order" : 2, "title" : "End Date", "format" : "date-time", "pattern" : "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", "examples" : [ "2017-01-26T00:00:00Z" ], "description" : "The date until which you'd like to replicate data for all incremental streams, in the format YYYY-MM-DDT00:00:00Z. All data generated between start_date and this date will be replicated. Not setting this option will result in always syncing the latest data." }, "page_size" : { "type" : "integer", "order" : 7, "title" : "Page Size of Requests", "default" : 100, "description" : "Page size used when sending requests to Facebook API to specify number of records per page when response has pagination. Most users do not need to set this field unless they specifically need to tune the connector to address specific issues or use cases.", "exclusiveMinimum" : 0 }, "account_id" : { "type" : "string", "order" : 0, "title" : "Account ID", "examples" : [ "111111111111111" ], "description" : "The Facebook Ad account ID to use when pulling data from the Facebook Marketing API." }, "start_date" : { "type" : "string", "order" : 1, "title" : "Start Date", "format" : "date-time", "pattern" : "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", "examples" : [ "2017-01-25T00:00:00Z" ], "description" : "The date from which you'd like to replicate data for all incremental streams, in the format YYYY-MM-DDT00:00:00Z. All data generated after this date will be replicated." }, "access_token" : { "type" : "string", "order" : 3, "title" : "Access Token", "description" : "The value of the access token generated. See the <a href=\"https://docs.airbyte.io/integrations/sources/facebook-marketing\">docs</a> for more information", "airbyte_secret" : true }, "custom_insights" : { "type" : "array", "items" : { "type" : "object", "title" : "InsightConfig", "required" : [ "name" ], "properties" : { "name" : { "type" : "string", "title" : "Name", "description" : "The name value of insight" }, "fields" : { "type" : "array", "items" : { "enum" : [ "account_currency", "account_id", "account_name", "action_values", "actions", "ad_bid_value", "ad_click_actions", "ad_id", "ad_impression_actions", "ad_name", "adset_bid_value", "adset_end", "adset_id", "adset_name", "adset_start", "age_targeting", "attribution_setting", "auction_bid", "auction_competitiveness", "auction_max_competitor_bid", "buying_type", "campaign_id", "campaign_name", "canvas_avg_view_percent", "canvas_avg_view_time", "catalog_segment_actions", "catalog_segment_value", "catalog_segment_value_mobile_purchase_roas", "catalog_segment_value_omni_purchase_roas", "catalog_segment_value_website_purchase_roas", "clicks", "conversion_rate_ranking", "conversion_values", "conversions", "converted_product_quantity", "converted_product_value", "cost_per_15_sec_video_view", "cost_per_2_sec_continuous_video_view", "cost_per_action_type", "cost_per_ad_click", "cost_per_conversion", "cost_per_dda_countby_convs", "cost_per_estimated_ad_recallers", "cost_per_inline_link_click", "cost_per_inline_post_engagement", "cost_per_one_thousand_ad_impression", "cost_per_outbound_click", "cost_per_thruplay", "cost_per_unique_action_type", "cost_per_unique_click", "cost_per_unique_conversion", "cost_per_unique_inline_link_click", "cost_per_unique_outbound_click", "cpc", "cpm", "cpp", "created_time", "ctr", "date_start", "date_stop", "dda_countby_convs", "dda_results", "engagement_rate_ranking", "estimated_ad_recall_rate", "estimated_ad_recall_rate_lower_bound", "estimated_ad_recall_rate_upper_bound", "estimated_ad_recallers", "estimated_ad_recallers_lower_bound", "estimated_ad_recallers_upper_bound", "frequency", "full_view_impressions", "full_view_reach", "gender_targeting", "impressions", "inline_link_click_ctr", "inline_link_clicks", "inline_post_engagement", "instant_experience_clicks_to_open", "instant_experience_clicks_to_start", "instant_experience_outbound_clicks", "interactive_component_tap", "labels", "location", "mobile_app_purchase_roas", "objective", "optimization_goal", "outbound_clicks", "outbound_clicks_ctr", "place_page_name", "purchase_roas", "qualifying_question_qualify_answer_rate", "quality_ranking", "quality_score_ectr", "quality_score_ecvr", "quality_score_organic", "reach", "social_spend", "spend", "total_postbacks", "unique_actions", "unique_clicks", "unique_conversions", "unique_ctr", "unique_inline_link_click_ctr", "unique_inline_link_clicks", "unique_link_clicks_ctr", "unique_outbound_clicks", "unique_outbound_clicks_ctr", "unique_video_continuous_2_sec_watched_actions", "unique_video_view_15_sec", "updated_time", "video_15_sec_watched_actions", "video_30_sec_watched_actions", "video_avg_time_watched_actions", "video_continuous_2_sec_watched_actions", "video_p100_watched_actions", "video_p25_watched_actions", "video_p50_watched_actions", "video_p75_watched_actions", "video_p95_watched_actions", "video_play_actions", "video_play_curve_actions", "video_play_retention_0_to_15s_actions", "video_play_retention_20_to_60s_actions", "video_play_retention_graph_actions", "video_thruplay_watched_actions", "video_time_watched_actions", "website_ctr", "website_purchase_roas", "wish_bid" ], "title" : "ValidEnums", "description" : "Generic enumeration.\n\nDerive from this class to define new enumerations." }, "title" : "Fields", "default" : [ ], "description" : "A list of chosen fields for fields parameter" }, "end_date" : { "type" : "string", "title" : "End Date", "format" : "date-time", "pattern" : "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", "examples" : [ "2017-01-26T00:00:00Z" ], "description" : "The date until which you'd like to replicate data for this stream, in the format YYYY-MM-DDT00:00:00Z. All data generated between the start date and this date will be replicated. Not setting this option will result in always syncing the latest data." }, "breakdowns" : { "type" : "array", "items" : { "enum" : [ "ad_format_asset", "age", "app_id", "body_asset", "call_to_action_asset", "country", "description_asset", "device_platform", "dma", "frequency_value", "gender", "hourly_stats_aggregated_by_advertiser_time_zone", "hourly_stats_aggregated_by_audience_time_zone", "image_asset", "impression_device", "link_url_asset", "place_page_id", "platform_position", "product_id", "publisher_platform", "region", "skan_conversion_id", "title_asset", "video_asset" ], "title" : "ValidBreakdowns", "description" : "Generic enumeration.\n\nDerive from this class to define new enumerations." }, "title" : "Breakdowns", "default" : [ ], "description" : "A list of chosen breakdowns for breakdowns" }, "start_date" : { "type" : "string", "title" : "Start Date", "format" : "date-time", "pattern" : "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", "examples" : [ "2017-01-25T00:00:00Z" ], "description" : "The date from which you'd like to replicate data for this stream, in the format YYYY-MM-DDT00:00:00Z." }, "time_increment" : { "type" : "integer", "title" : "Time Increment", "default" : 1, "description" : "Time window in days by which to aggregate statistics. The sync will be chunked into N day intervals, where N is the number of days you specified. For example, if you set this value to 7, then all statistics will be reported as 7-day aggregates by starting from the start_date. If the start and end dates are October 1st and October 30th, then the connector will output 5 records: 01 - 06, 07 - 13, 14 - 20, 21 - 27, and 28 - 30 (3 days only).", "exclusiveMaximum" : 90, "exclusiveMinimum" : 0 }, "action_breakdowns" : { "type" : "array", "items" : { "enum" : [ "action_canvas_component_name", "action_carousel_card_id", "action_carousel_card_name", "action_destination", "action_device", "action_reaction", "action_target_id", "action_type", "action_video_sound", "action_video_type" ], "title" : "ValidActionBreakdowns", "description" : "Generic enumeration.\n\nDerive from this class to define new enumerations." }, "title" : "Action Breakdowns", "default" : [ ], "description" : "A list of chosen action_breakdowns for action_breakdowns" } }, "description" : "Config for custom insights" }, "order" : 6, "title" : "Custom Insights", "description" : "A list which contains insights entries, each entry must have a name and can contains fields, breakdowns or action_breakdowns)" }, "include_deleted" : { "type" : "boolean", "order" : 4, "title" : "Include Deleted", "default" : false, "description" : "Include data from deleted Campaigns, Ads, and AdSets" }, "fetch_thumbnail_images" : { "type" : "boolean", "order" : 5, "title" : "Fetch Thumbnail Images", "default" : false, "description" : "In each Ad Creative, fetch the thumbnail_url and store the result in thumbnail_data_url" } } }

Hey, as to get more information this is not caused when you are creating a new source?

Hi, when creating a new source the field is empty and optional. This happens when modifying a current source.

To replicate:

  1. Add an end date
  2. Save
  3. Remove end date and leave field empty
  4. Save

Gotcha can you create an issue in github and add a video if possible? Also information like which Airbyte version you are using

I’ve replied to this issue here, seems to be UI related.

Do you suggest opening a new issue?

Thanks for commenting over the issue that should be fine we can continue over the same issue