33

When a user visits our site and signs up, how can I capture which website they came from?

Be it search, a PR website, etc. I don't care what page from our site they visited, I just want to know which marketing efforts are giving us the most signups.

I know Google Analytics can probably do this but I'd like to have something internal for reference as well.

davidism
  • 121,510
  • 29
  • 395
  • 339
Robert Guice
  • 609
  • 1
  • 5
  • 12

2 Answers2

44

request.referrer contains the URL the request came from, although it might not be sent by the client for various reasons.

The attribute takes its value from the Referer (not a typo!) header:

referrer = request.headers.get("Referer")

or, using the Flask shortcut:

referrer = request.referrer

See this tutorial for an example.

Selcuk
  • 57,004
  • 12
  • 102
  • 110
4

Thanks to the accepted answer, I set up my app to capture an external referrer and store it in the session. Then when the user signs up I save that value with the user.

from flask import request, g
from werkzeug.urls import url_parse

def referral():
    url = request.referrer

    # if domain is not mine, save it in the session
    if url and url_parse(url).host != "example.com":
        session["url"] = url

    return session.get("url")

@app.before_request
def before_request():
    g.user = current_user
    g.url = referral()
davidism
  • 121,510
  • 29
  • 395
  • 339
Robert Guice
  • 609
  • 1
  • 5
  • 12