Ads.twitter analytics promoted/organic tweet data don't match async report

api

#1

When I pull the async reports for promoted / organic tweets; there is data discrepancy between the pulled reports and the ads.twittter analytics dashboard under promoted/organic tweets.

My process for pulling async reports is this:

Make a call to accounts/:accountId/promoted_tweets to get the tweet ids
Make posts to stats/jobs/accounts/:accountIds with all the promoted tweet ids
Make gets to stats/jobs/accounts/:accountIds with all the job ids

wait for the report url to come back
parse the data then aggregate the data

account id: 2gsd7q

Can I get help in troubleshooting this issue, I’m a bit lost to how to find the missing data.


#2

Side note: I’m pulling engagement data from campaigns and line items just find. The data coming back from these two are matching up with the dashboard data. But promoted and organic tweets aren’t matching up.


#3

Thanks for reaching out, @vinhAdcellerant.

Please provide some specific examples, including the values you expect to see and what values you’re actually seeing along with the actual Ads API requests you’re making.


#4

Hi Juan!

Thank you for getting back to me.

An example would be on Oct 20th the account 2gsd7q dashboard displays 804 organic impressions and 2977 promoted impressions. What I actually get back after my API requests is this: 152 promoted impressions and 4 organic impressions.

I’m making a initial call to

method: “GET”,
uri: https://ads-api.twitter.com/2/accounts/${accountId}/promoted_tweets,

to get the promoted tweet and organic tweet ids.
Then I am posting to the job endpoint

method: “POST”,
uri: https://ads-api.twitter.com/2/stats/jobs/accounts/${accountId}${queryString}

queryString =
‘entity=${entity}&entity_ids=${isArr[i]}&metric_groups=${group}&granularity=DAY&placement=ALL_ON_TWITTER&start_time=${startDate}&end_time=${endDate}’

then I am sending Gets to the job endpoint with the job ID from the post (id_str).

method: “GET”,
uri: https://ads-api.twitter.com/2/stats/jobs/accounts/${accountId}?job_ids=${jobId}

I do an operation where if url is null and status is processing; I send a GET request again every 5 seconds until url is resolved.

Once all urls are resolved I gunzip the file and join the buffer to get the data back.

I validated that the data on the url link matches the resulting data I get back after the operation to extract the data to JSON. (so the data coming back before operations is still 152promoted and 4 organic impressions)

I map the JSON data to my database. I expect that the data should closely match the dashboard data. I don’t know if the dashboard data is calling a different endpoint or method.

Thank you for your help in resolving this.


#5

@vinhAdcellerant: We still need some additional information before being able to look into the specifics of your question. Please see Guidelines for Reporting Issues for more information on what IDs you can share and what information we need.

For now, though, please see the following. ads.twitter.com shows 2,815 impressions for ads account 2gsd7q on 2017-10-20.

This matches what we get through the API, at the account-level:

$ twurl -H ads-api.twitter.com "/2/stats/accounts/2gsd7q?entity=ACCOUNT&entity_ids=2gsd7q&metric_groups=ENGAGEMENT&start_time=2017-10-20&end_time=2017-10-21&placement=ALL_ON_TWITTER&granularity=TOTAL"
{
  "data_type": "stats",
  "time_series_length": 1,
  "data": [
    {
      "id": "2gsd7q",
      "id_data": [
        {
          "segment": null,
          "metrics": {
            "impressions": [
              2815
            ],
            "follows": [
              1
            ],
            "retweets": null,
            "likes": null,
            "engagements": [
              2
            ],
            "replies": null
          }
        }
      ]
    }
  ],
  "request": {
    "params": {
      "start_time": "2017-10-20T04:00:00Z",
      "segmentation_type": null,
      "entity_ids": null,
      "end_time": "2017-10-21T04:00:00Z",
      "country": null,
      "placement": "ALL_ON_TWITTER",
      "granularity": "TOTAL",
      "entity": "ACCOUNT",
      "platform": null,
      "metric_groups": [
        "ENGAGEMENT"
      ]
    }
  }
}

#6

@juanshishido: attached is the promoted and organic tweet impressions for 2017-10-20. I’m not sure what other information you need before being able to look into the specifics of the question. So below is a list of promoted ids sent to the jobs post request in 20 unit increments. entity=PROMOTED_TWEET, metric_groups=‘ENGAGEMENT’. If you request async reports using these IDs; you’ll see they won’t match up with the dashboard data.

[ ‘4poo5’,
‘4poo6’,
‘4poo7’,
‘4xhrd’,
‘4xhre’,
‘4xhrf’,
‘57hup’,
‘57huq’,
‘57hur’,
‘5imh2’,
‘5imh3’,
‘5imh4’,
‘5uac3’,
‘5uac4’,
‘5uac5’,
‘5uaup’,
‘5uauq’,
‘5uaur’,
‘65vwa’,
‘65vwb’ ]
[ ‘65vwc’,
‘6pelj’,
‘6pelk’,
‘6pell’,
‘75vuc’,
‘79s8x’,
‘79s8y’,
‘79s8z’,
‘8foeq’,
‘8foer’,
‘8foes’,
‘9f3ci’,
‘9f3cj’,
‘9f3ck’,
‘a9gii’,
‘a9gij’,
‘a9gik’,
‘bv92h’,
‘bv92i’,
‘bv92j’ ]
[ ‘e6twg’,
‘e6twh’,
‘e6twi’,
‘e6twj’,
‘gq6wd’,
‘gq6we’,
‘gq6wf’,
‘iyk00’,
‘iyk01’,
‘iyk02’,
‘m9hue’,
‘m9huf’,
‘m9hug’,
‘m9huh’,
‘omnz4’,
‘omnz5’,
‘omnz6’,
‘omnz7’,
‘qfe9s’,
‘qfe9t’ ]
[ ‘qfe9u’,
‘qfe9v’,
‘qfe9w’,
‘qfe9x’,
‘sggm1’,
‘sggm2’,
‘tbpt5’,
‘tbpt6’,
‘unpb8’,
‘unpb9’,
‘unpba’,
‘unpbb’,
‘unpbc’,
‘w4oz9’,
‘w4oza’,
‘w4ozb’,
‘w4ozc’,
‘w4ozd’,
‘xq6i4’,
‘xq6i5’ ]
[ ‘xq6i6’,
‘xq6i7’,
‘xq6i8’,
‘ymtuf’,
‘ymtug’,
‘ymtuh’,
‘zwoml’,
‘zwomm’,
‘zwomn’,
‘11273b’,
‘11273c’,
‘11273d’,
‘11273e’,
‘11273f’,
‘12p60a’,
‘12p60b’,
‘12p60c’,
‘12p60d’,
‘1494os’,
‘1494ot’ ]
[ ‘1494ou’,
‘1494ov’,
‘1494ow’,
‘1495s4’,
‘162v9u’,
‘162v9v’,
‘162v9w’,
‘162v9x’,
‘162v9y’,
‘162vec’,
‘17574m’,
‘17574n’,
‘17574o’,
‘17574p’,
‘17575y’,
‘19djgt’,
‘19djgu’,
‘19djgv’,
‘19djgw’,
‘19djgx’ ]
[ ‘19djgy’,
‘19djnk’,
‘1bhmyb’,
‘1bhmyc’,
‘1bhmyd’,
‘1bhmye’,
‘1bhmyf’,
‘1dczun’,
‘1dczuo’,
‘1dczup’,
‘1dczuq’,
‘1dd28f’,
‘1et5wv’,
‘1et5ww’,
‘1et5wx’,
‘1et5wy’,
‘1et5wz’,
‘1et5x0’,
‘1g0g0z’,
‘1g0g10’ ]
[ ‘1g0g11’,
‘1g0g12’,
‘1g0g13’,
‘1g0g14’,
‘1hiw5q’,
‘1hiw5r’,
‘1hiw5s’,
‘1hiw5t’,
‘1hiw5u’,
‘1hiw5v’,
‘1iozu1’,
‘1iozu2’,
‘1iozu3’,
‘1iozu4’,
‘1iozu5’,
‘1iozu6’,
‘1k9kr7’,
‘1k9kr8’,
‘1k9kr9’,
‘1k9kra’ ]
[ ‘1k9krb’, ‘1k9krc’ ]


#7

Thanks, @vinhAdcellerant.

Not sure how you’re getting to the page that lists 3.8k total impressions, with 2,977 promoted. When I navigate to Analytics > Tweet activity from Ads Manager for ads account 2gsd7q and select October 20, I see:

The way the Twitter activity dashboard works is that it includes Tweets and its corresponding data based on the Tweets’ created at date. Of the 2,815 impressions shown previously (via Ads Manager), the most recent Tweet that was promoted and that received impressions was created on 2017-02-08. This is outside of the range that the Twitter activity dashboard would consider.

For any metrics related to ads, please use Ads Manager instead of the Tweet activity dashboard.


#8

@juanshishido, This is starting to be an onion; unraveling stink one layer at a time lol.

So one issue is that my Analytics > Tweet Activity dashboard for 2017/10/20 for account 2gsd7q doesn’t match up with your view. Potentially they don’t match up with any dates. attached is the month of October 2017.

The next issue is that the Ads Manager view doesn’t show me tweets for promoted and organic tweets. We are creating dashboard view for those entity with engagement metrics like impressions. We need a way to validate that our data coming back from the api matches up with the dashboard data coming from ads.twitter.

The last issue is that the 53impressions you have for October 20th doesn’t match up with the 156total (152 promoted, 4 organic)impressions given back from the api calls.

In conclusion we have three numbers 156 total impressions, 3.8k total impressions and 53 total impressions. Which one is the right one?


#9

@vinhAdcellerant: Let’s look at a few examples for my ads account.

680 impressions on 2017-09-08:


466 impressions on 2017-07-20:


Not sure what might be going on, but your best bet would be to submit a ticket through the UI—the “Help?” link at the top right.


The next issue is that the Ads Manager view doesn’t show me tweets for promoted and organic tweets. We are creating dashboard view for those entity with engagement metrics like impressions.

That is correct. Ads Manager does not show organic information. The difficulty you’ll have in pulling in organic metrics for specifics dates is knowing which Tweets to pull data for. The only criterion you’ll have for filtering is whether the Tweet was created after the specific date you’re looking at. It’s possible, for example, that a Tweet from a few years ago gets seen by a user.


#10

@juanshishido: For account 2gsd7q this is what I am seeing

1166 Impressions between 2017-09-02 and 2017-09-08

644 promoted impressions 2017-09-08

7664 Impressions between 2017-07-15 and 2017-07-21

828 promoted impressions on 2017-07-20


#11

@vinhAdcellerant: The examples I previously provided were for my ads account. (I’ll update my previous comment to be explicit about that. I suggest you do the same to minimize confusion.)

You’re seeing 1,166 impressions for 2017-09-02 through 2017-09-08 through Ads Manager. Through the Tweet activity dashboard, you’re seeing 644 promoted impressions. What about for the rest of that date range?


#12

@juanshishido I thought you were pulling the dashboard for this account: 2gsd7q. That one is the one I am using. I assume you can just look into a person’s account and have the dashboard reflect that. I’ll make edit to be explicit of the account I’m on.


#13

@juanshishido

for tweet analytics/tweet activity for account 2gsd7q on dates:
2017-09-02 promoted impressions: 0 organic impressions: 411 tweets: 0
2017-09-03 promoted impressions: 0 organic impressions: 305 tweets: 0
2017-09-04 promoted impressions: 0 organic impressions: 513 tweets: 0
2017-09-05 promoted impressions: 0 organic impressions: 587 tweets: 1
2017-09-06 promoted impressions: 75 organic impressions: 525 tweets: 2
2017-09-07 promoted impressions: 447 organic impressions: 471 tweets: 0
2017-09-08 promoted impressions: 644 organic impressions: 711 tweets: 1


#14

Thanks for that extra info, @vinhAdcellerant, and for updating the previous post!

What you’re seeing in Ads Manager for 2017-09-02 through 2017-09-08, inclusive, matches what’s on the Tweet activity dashboard for those specific dates: 1,166.

Let us know what you hear from support through ads.twitter.com. Thanks!