Contact porter guides in Nepal

4 minute read

One of the challenges in planning the Everest Base Camp (EBC) trek that my wife and I are planning to do later this month is to arrange in advance for porter/guide services. There are several agencies based in Kathmandu that offer a complete package deal with all the bells and whistles - flights, food, accommodation, transportation, guides, porters. However, we were simply looking to reach out to local guides and porters for just the trek, having made all other arrangements on our own. One excellent resource was this webpage. It is a long read. I tried to email a couple of folks but got no responses, which is not surprising given that they were likely to be out on tour and without internet access. You can pick and choose who you want to email and reach out to them, with no guarantee that they will be available or will respond. Or you can let a script do the work of emailing for you, and focus only on the services that respond - a much smaller subset.

Step 1: Extract email addresses from the page

Enter Python’s Beautiful Soup package. It is beautiful, and using the script below, you can extract the email addresses from the page I mentioned earlier.

from bs4 import BeautifulSoup
import urllib
r = urllib.urlopen('').read()
soup = BeautifulSoup(r,"html.parser")
for link in soup.find_all(href=re.compile("@")):
    print link.string

This will give you a list of email addresses. Since the webpage contains emails for those that have used the guides and porters and left reviews, you may want to do a quick scan and manually delete any email that is not a guide or porter.

If you are further interested in extracting all the weblinks to sites and facebook profiles for the service providers where available, you can run the following.

for link in soup.find_all(href=re.compile("http")):
    print link.string

For the next step, we just need the email ids.

Step 2: Send automated emails

This step requires you to have a gmail account. Copy the email ids to a Google Sheet and in the cell adjacent to each email, copy-paste the email text that you want to send to each service. Preferably, include your tentative travel dates, and ask about availability and price. Also ask if they can recommend someone else if they are unavailable for your dates. Add a header to the two columns in the sheet - e.g. ‘email id’ and ‘email message’.

Now using this nifty Google script, you can automatically send your inquiry emails out to the services. Follow the instructions in the script. I used the version below since it allows you to keep track of emails sent, and keeps you from sending multiple emails to the same email address.

// This constant is written in column C for rows for which an email
// has been sent successfully.

function sendEmails2() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var startRow = 2;  // First row of data to process
  var numRows = 64;   // Number of rows to process
  // Fetch the range of cells A2:B3
  var dataRange = sheet.getRange(startRow, 1, numRows, 3)
  // Fetch values for each row in the Range.
  var data = dataRange.getValues();
  for (var i = 0; i < data.length; ++i) {
    var row = data[i];
    var emailAddress = row[0];  // First column
    var message = row[1];       // Second column
    var emailSent = row[2];     // Third column
    if (emailSent != EMAIL_SENT) {  // Prevents sending duplicates
      var subject = "EBC Trek Porter Guide needed";
      MailApp.sendEmail(emailAddress, subject, message);
      sheet.getRange(startRow + i, 3).setValue(EMAIL_SENT);
      // Make sure the cell is updated right away in case the script is interrupted

You need to update two parameters in the script above - the number of rows (number of emails in your sheet), and the subject (you can be more descriptive and modify the version there).

To make sure you don’t spam inboxes with multiple emails, it is best to do a test run with your own email

As instructed, click ‘Run’ and this is where the magic happens. You will be asked to allow the script permission to send email on your behalf. As the script executes, it will populate a third column in your sheet with the status of EMAIL_SENT if the email was sent to that email id. You can further check your send folder on gmail to confirm that.

Step 3: Follow-up on responses

I had responses coming in from the moment I sent the email until the following 2 days. Of the 64 emails sent, 4 bounced back, and 18 responded. A few were unavailable but were willing to recommend someone else. I was able to confirm and book with one of the services within a day. It takes time and effort for someone to send you a reply, and many are often out doing their job and making do with spotty internet access to send you a quick response. So I made sure to respond back to those that I did not pick thanking them for their responses.

Someday, I plan to compile a curated list of guides with their contact info. Until then, the above should serve you well.


Leave a Comment