Skip to content

Instantly share code, notes, and snippets.

@stefanpejcic
Created August 12, 2019 09:51
Show Gist options
  • Save stefanpejcic/ec6b3f5cd04181312723dd111e9c9303 to your computer and use it in GitHub Desktop.
Save stefanpejcic/ec6b3f5cd04181312723dd111e9c9303 to your computer and use it in GitHub Desktop.
Search gmail for receipts from paypal and than add them inside a google spreadsheet
function searchGmail() {
var threads = GmailApp.search("from:paypal", 0, 10);
var sheet = SpreadsheetApp.getActiveSheet();
var header = sheet.getRange(1, 1, 1, sheet.getLastColumn()).getValues()[0];
for (var t=0; t<threads.length; t++) {
var msgs = threads[t].getMessages();
for (var m=0; m<msgs.length; m++) {
var response = extractPayPalDetails_(msgs[m]);
var row = [];
for (var h=0; h<header.length; h++) {
if (header[h] in response) {
row.push(response[header[h]]);
} else {
row.push("");
}
}
sheet.appendRow(row);
}
}
}
function extractPayPalDetails_(msg) {
var result = {};
var body = msg.getPlainBody().replace(/\s+/g, " "),
html = msg.getBody().replace(/\s+/g, " ");
var match = /[A-Z]{3}\s\d+,\s\d{4}\s\d{2}:\d{2}:\d{2}\s.{9}/g.exec(body);
if (match)
result["Transaction Date"] = match[1];
match = /<tr bgcolor="#ffffff"><td.*?>(.*?)<\/td><td.*?><a href.*?>(.*?)<\/a><\/td><td.*?>(.*?)<\/td><td.*?>(.*?)<\/td><td.*?>(.*?)<\/td><\/tr>/g.exec(html);
if (match) {
result["Item #"] = match[1];
result["Item Title"] = match[2];
result["Quantity"] = match[3];
result["Price"] = match[4];
result["Subtotal"] = match[5];
}
match = /Shipping & Handling:\s+\(.*?\)(.*?)\s+Shipping/g.exec(body);
if (match)
result["Shipping and Handling"] = match[1];
match = /Shipping Insurance.*?:(.*?)\s+Total:\s*(.*? .*?)\s+/g.exec(body);
if (match) {
result["Shipping Insurance"] = match[1];
result["Total"] = match[2];
}
match = /credit card statement as "(.*?)".*?purchased from:(.*?)\s+Receipt id:([\d\-]+)/gi.exec(body);
if (match) {
result["Name in Statement"] = match[1];
result["Purchased From"] = match[2];
result["Receipt ID"] = match[3];
}
match = /international shipping.*?Total:(.*?)\s+.*credit card statement as "(.*?)"/gi.exec(body);
if (match) {
result["International Shipping Total"] = match[1];
result["International Name in Statement"] = match[2];
}
return result;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment