Doesn't seem like iTunes connect has basic exporting of user emails from Prerelease
> External testers
Needed to export emails to CSV
Does anyone have a script or workaround solution?
Thanks!
Doesn't seem like iTunes connect has basic exporting of user emails from Prerelease
> External testers
Needed to export emails to CSV
Does anyone have a script or workaround solution?
Thanks!
You can use pilot (from Fastlane) to do that :
To export in a CSV file: fastlane pilot export
$ fastlane pilot list
+--------+--------+--------------------------+-----------+
| Internal Testers |
+--------+--------+--------------------------+-----------+
| First | Last | Email | # Devices |
+--------+--------+--------------------------+-----------+
| Felix | Krause | felix@krausefx.com | 2 |
+--------+--------+--------------------------+-----------+
+-----------+---------+----------------------------+-----------+
| External Testers |
+-----------+---------+----------------------------+-----------+
| First | Last | Email | # Devices |
+-----------+---------+----------------------------+-----------+
| Max | Manfred | email@email.com | 0 |
| Detlef | Müller | detlef@krausefx.com | 1 |
+-----------+---------+----------------------------+-----------+
Just use console get Email, First Name, Last Name
Paste this into console https://gist.github.com/creaoy/80d1092283a5d0fa1070
Upon trial and error (because I'm desperate), I found a way out, the low tech way.
Go to Activity > iOS History > All Builds > Testers
This is the page where you see all of your external and internal testers' emails, name, status, sessions, crashes and devices. Select all rows and paste them into excel. It will display all information in each cell nicely :) Select the first column in excel and you have all the emails only.
I expanded creaoy's script to include the Status (Notified/Installed x.xx). Still works for me today.
Scroll all the way down so all testers are loaded. Then paste this in Safari's error console and hit enter.
var text = '';
$('.col-email').each(function(index,el) {
if (index == 0) {
text = 'Email, First Name, Last Name, Status\n';
}
else {
//Email
text = text + $.trim($(el).find("a").text()) + ',';
//First Name
text = text + $.trim($($($($('.col-name')[index]).find("span")[0]).find("span")[0]).text()) + ',';
//Last Name
text = text + $.trim($($($($('.col-name')[index]).find("span")[0]).find("span")[1]).text()) + ',';
//Status
text = text + $.trim($($($($('.col-status')[index]).find("div")[0]).find("span")[0]).text()) + '\n';
}
});
var a = document.createElement("a");
var file = new Blob([text], {type: 'text/csv'});
a.href = URL.createObjectURL(file);
a.download = name; a.click();
Not as yet. You can only import a csv file but not create one from the users there.
You can copy the rows, edit them in TextEdit/Notepad in the format: fistname,lastname,email
and save that as csv to use when you want to import those emails later.
It would be good if they implemented it to do this automatically, or at least having the option to send the updates to specific groups that you can create.
I made a little console hack that extracts just the emails. Improve to your liking :-)
Some great answers, but wanted to add another option. BoardingBot is a tool that lets you send TestFlight invites automatically, as well as emails to your beta testers. So this might fill your need for contacting your beta testers.
Disclaimer: I'm the founder of BoardingBot :)
The below method is flakey - there is a great ruby gem for managing testflight testers called Fastlane pilot. I woudl recommend looking into that instead: https://github.com/fastlane/fastlane/tree/master/pilot
Found a google chrome extension that will do the job:
Table capture:https://chrome.google.com/webstore/detail/table-capture/iebpjdmgckacbodjpijphcplhebcmeop/reviews?hl=en
Also needed to filter out duplicates, which can be done using Google spreadsheets
Since iTunes Connect is now an angular app, many of the answers on this page no longer work. However if you have the Angular/Batarang extension for Chrome you can paste this script in the console (cmd+i) and it will spit out a csv. Note that first you have to inspect an item in the list (cmd + shift + c) to get a reference to $scope
. Also don't forget to scroll down to make the page auto-load the whole list.
var text = '';
angular.forEach($scope.filteredTesters, function(val) {
text += val.firstName.value + ',';
text += val.lastName.value + ',';
text += val.emailAddress.value + '\n';
});
var a = document.createElement("a");
var file = new Blob([text], {type: 'text/csv'});
a.href = URL.createObjectURL(file);
a.download = name; a.click();
If you just need the emails and have a text editor with regex replacement you can do this
^.*\n\n
with <empty string>
. This removes all names\n\s\n
with ,
.\n
with ,
.and you're left with a CSV of all the emails
if like me you also needed the date this is the code you need:
var text = '';
$('.col-email').each(function(index,el) {
if (index == 0) {
text = 'Email, First Name, Last Name, Status, Date\n';
}
else {
//Email
text = text + $.trim($(el).find("a").text()) + ',';
//First Name
text = text + $.trim($($($($('.col-name')[index]).find("span")[0]).find("span")[0]).text()) + ',';
//Last Name
text = text + $.trim($($($($('.col-name')[index]).find("span")[0]).find("span")[1]).text()) + ',';
//Status
text = text + $.trim($($($($('.col-status')[index]).find("div")[0]).find("span")[0]).text()) + ',';
//Date
text = text + '\"' + $.trim($($($($('.col-status')[index]).find("div")[0]).find("span")[2]).text()) + '\"\n';
}
});
var a = document.createElement("a");
var file = new Blob([text], {type: 'text/csv'});
a.href = URL.createObjectURL(file);
a.download = name; a.click();
I came up with a jQuery solution to output this data to the console in CSV format. It is dependent on the way that the pages selectors are set up but as of now (Sep. 2017), it runs great.
Open up the console on your browser (I use Chrome), copy and paste this code in, hit enter. Quick and dirty.
I borrowed some code from guido's answer here that triggers an automatic download after hitting enter.
output = "email,first name,last name\n";
jQuery('table.table-itc-testers tr[ng-repeat*="itcUser"]').each(function(){
row = [];
//Email Address
row.push(jQuery(this).find('span a[href*="users_roles"]').text());
// First and last name
full_name = jQuery(this).find('td.sorted > span:not(.ng-hide)');
// If only name is filled out
if(full_name==""){
row.push("");
row.push("");
} else {
row.push(full_name.clone().children().remove().end().text().trim());
row.push(full_name.find('span.lastname').text());
}
output += row.join(",") + "\n";
});
var a = document.createElement("a");
var file = new Blob([output], {type: 'text/csv'});
a.href = URL.createObjectURL(file);
a.download = 'external_testers.csv'; a.click();
Quick Update with a new answer: iTunes Connect now has an easy-to-use download button on the right side of the page!