Inaccurate placement list returned by GET line item when using campaign_ids querystring


#1

One of our users created a campaign with ALL_ON_TWITTER placement type, and then changed it in Twitter Ads UI. Then, they synched it down via the Ads API, and ALL_ON_TWITTER was returned, in addition to the other placement types.

Can a twitter engineer investigate whether there is a bug in the line item GET endpoint?

Here’s what the user did to cause this scenario:

  1. Created a Twitter Campaign with placement type “ALL_ON_TWITTER” in our platform.
  2. Went into Twitter (via Ads Editor) - removed ALL_ON_TWITTER, replaced with PROFILES;TIMELINES
  3. Synched The Ad Set to our platform.
  4. The campaign shows as having all 3 placements checked in, when it should just be TIMELINES+PROFILES.

Placement types and AWARENESS objective
#2

Hi Chris,

Do you mind sharing the account ID/campaign ID for this case?

By the way we were trying to go with the “Ad group” naming versus Ad set, I’m not sure if there are functional differences to what FB has :slight_smile: https://business.twitter.com/en/help/campaign-editing-and-optimization/ad-groups.html

Thanks,

John


#3

Hi John,

This question is in reference to the line item associated with campaign 78y06 in account p8cy0k.

Thanks,

Chris


#4

Thanks for the question, @chris_august7, and for providing these details.

We’ve taken a look at this specific campaign and see the correct placements being returned.

$ twurl -H ads-api.twitter.com "/1/accounts/p8cy0k/line_items/7g2hc" | jq
{
  "request": {
    "params": {
      "line_item_id": "7g2hc",
      "account_id": "p8cy0k"
    }
  },
  "data_type": "line_item",
  "data": {
    "bid_type": "TARGET",
    "advertiser_user_id": 1431315708,
    "name": {name},
    "placements": [
      "TWITTER_PROFILE",
      "TWITTER_TIMELINE"
    ],
    "start_time": null,
    "bid_amount_local_micro": 4000000,
    "automatically_select_bid": false,
    "advertiser_domain": null,
    "target_cpa_local_micro": null,
    "primary_web_event_tag": null,
    "charge_by": "IMPRESSION",
    "product_type": "PROMOTED_TWEETS",
    "end_time": null,
    "bid_unit": "VIEW",
    "total_budget_amount_local_micro": null,
    "objective": "AWARENESS",
    "id": "7g2hc",
    "entity_status": "ACTIVE",
    "paused": false,
    "account_id": "p8cy0k",
    "optimization": "DEFAULT",
    "categories": [],
    "currency": "USD",
    "created_at": "2017-01-19T17:25:30Z",
    "tracking_tags": [
      {
        "tracking_partner": "DOUBLE_CLICK",
        "tracking_tag": {tracking_tag}
      }
    ],
    "updated_at": "2017-01-25T22:00:23Z",
    "include_sentiment": "POSITIVE_ONLY",
    "campaign_id": "78y06",
    "creative_source": "MANUAL",
    "deleted": false
  }
}

In our database, the original placement (ALL_ON_TWITTER) was set at 2017-01-19 17:25:30—the line item create time. It was then replaced by TWITTER_PROFILE and TWITTER_TIMELINE at 2017-01-25 21:50:37.

Not sure what would have caused ALL_ON_TWITTER to continue showing. Is that still the case that you see three placements on your end?


#5

At 4:10pm PT yesterday, I got 3 placements back, after they had changed it to 2 placements.

Now, both using our java framework and using twurl, I’m seeing 2 placements.

I wonder if there is some kind of caching / latency issue on your side that may cause this?

In any case, I think we can treat this as resolved.

Thanks!


#6

Thanks for confirming, @chris_august7!

Yes, this is a strange one—we haven’t heard of other cases. If you see it again, please don’t hesitate to reach out so we can try and repro.


#7

Hi Juan,

I figured out why you couldn’t reproduce it. You need to use different querystring parameters to twurl, then you’ll see what I’m seeing. You need to use the “campaign_ids” selector instead of using the line item id.

  $ ⮀twurl -H ads-api.twitter.com "/1/accounts/p8cy0k/line_items?campaign_ids=78y06&with_deleted=true" | jq
  {
      "request": {
      "params": {
      "with_deleted": true,
      "account_id": "p8cy0k",
      "campaign_ids": [
        "78y06"
      ]
    }
  },
  "data": [
    {
      "bid_type": "TARGET",
      "advertiser_user_id": 1431315708,
      "placements": [
        "ALL_ON_TWITTER",
        "TWITTER_PROFILE",
        "TWITTER_TIMELINE"
      ],
      "start_time": null,
      "automatically_select_bid": false,
      "advertiser_domain": null,
      "target_cpa_local_micro": null,
      "primary_web_event_tag": null,
      "charge_by": "IMPRESSION",
      "product_type": "PROMOTED_TWEETS",
      "end_time": null,
      "bid_unit": "VIEW",
      "total_budget_amount_local_micro": null,
      "objective": "AWARENESS",
      "id": "7g2hc",
      "entity_status": "ACTIVE",
      "paused": false,
      "account_id": "p8cy0k",
      "optimization": "DEFAULT",
      "categories": [],
      "currency": "USD",
      "created_at": "2017-01-19T17:25:30Z",
      "updated_at": "2017-01-25T22:00:23Z",
      "include_sentiment": "POSITIVE_ONLY",
      "campaign_id": "78y06",
      "creative_source": "MANUAL",
      "deleted": false
    }
  ],
  "data_type": "line_item",
  "total_count": 1,
  "next_cursor": null
}

#8

Very good find here, @chris_august7. Looked at it a bit more and it seems isolated to the with_deleted param. If it’s excluded, only "placements": ["TWITTER_PROFILE", "TWITTER_TIMELINE"] is shown, which is correct. Will investigate this further. Thanks!