The Why

Would it shock you to learn that we haven't mailed-out contribution statements in over ten years at our organization? (At least here in Missouri, we're not required to.) Sure, there are a handful we have to print and mail each year for those that can't or won't use computers and email, but the other 99.7% of ours go out via Email. If you're interested in doing the same, here's how we do it.

Our strategy is to send an email that contains a "tokenized link" to the statement to everyone who has contributed more than $1 to one of our applicable funds, rather than send the statement itself as a PDF or whatever (which would be much more complicated and a lot less secure). Rock provides an online, printable version of the statement already, so why not just point people there? The "tokenized" part of the link is where the magic happens... anyone receiving the email can simply click the link (in our case, a link that looks like a button) and they are magically logged-in to our website even if they don't have a login. This dramatically reduces the number of calls/emails we get during tax season because someone contributed (perhaps via check every week), but doesn't have an account on our website, so they can't get to their statement without creating an account, us merging that account with their real profile, blah blah blah. All of that goes away when you send a tokenized link.

The Template

First, we need an email template from which to send these emails. I'm not going to give you a complete email template, as you likely already have a standard one and you wouldn't want our branding, anyway. But here's the important part of the email you can just paste into an existing copy of your standard template, and name it Contribution Statement Email or whatever makes sense to you.

<p>You are receiving this email because we have record of your contributions to CHURCH NAME in 2018. Thank you for contributing to the ministries of CHURCH NAME!</p>
<p>The button below will take you directly to your Giving Statement, which you can use for tax purposes.</p>
      <td style="background-color: #425963;border-color: #dbd4c7;border: 2px solid #dbd4c7;;padding: 10px;text-align: center;">
      <a style="display: block;color: #ffffff;font-size: 12px;text-decoration: none;text-transform: uppercase;" href="{% raw %}{{ 'Global' | Attribute: 'PublicApplicationRoot' }}ContributionStatement?StatementYear=2018&rckipid={{ Person | PersonTokenCreate:1440,null,444 }}{% endraw %}">
            Get My Statement</a>
<p>If you find a problem with your statement, please contact us at <a href="mailto:EMAIL@ADDRRESS.COM">EMAIL@ADDRESS.COM</a> or call PHONE NUMBER.</p>

There's a lot going on in that little bit of code, but it's not as complicated as it seems. Most of it is a table in which our button (link) lives. You will likely want to change the colors of the button text, background, and border to whatever looks good with your branding... and of course change the text of the email to whatever makes sense for your organization. I just entered some boilerplate here vs. our actual verbiage.

The part we really want to look at is the tokenized link itself, which is href="{% raw %}{{ 'Global' | Attribute: 'PublicApplicationRoot' }}ContributionStatement?StatementYear=2018&rckipid={{ Person | PersonTokenCreate:1440,null,444 }}{% endraw %}">Get My Statement</a>

What we're doing is constructing a link to your PublicApplicationRoot Global Attribute with a page route of ContributionStatement and tacking on StatementYear=2018 as a querystring parameter. You need to make sure that whatever page your contribution statement lives on* (page 444 on the default External Site) has a Page Route of ContributionStatement **. You could of course just hard code /page/444 (or whatever page your statement lives on) in the URL, but that makes for an uglier URL. Oh, and the reason the link is wrapped in {{ raw }} {{ endraw }} Lava is to make it work in a Email Wizard template. If you're using a Simple Editor template, remove those raw tags.

Note: If you already have Lava in your default Wizard template that ends up wrapping your new Link code with RAW tags, you'll likely have to remove the RAW tags around the link even when using the Wizard.

The "magic" part of the URL is the token itself: rckipid={{ Person | PersonTokenCreate:1440,null,444 }} The PersonTokenCreate Lava filter takes three parameters. The first one is how long the token is good for, in this case 1440 minutes, or 24hours. Obviously that's not long enough for real-world use and we set it to that just for safety while testing. When we actually send the email we set it to something like 136800 which is 95 days. We send our statements Feb 1, so that's a good time limit for us. Set yours to whatever makes sense.

The second parameter is how many times the token can be used, and here we're passing null which means (unless you've changed your Global Token defaults) "unlimited uses."

The third parameter is the specific page this token works on. In our case, 444 is the page the statement lives on, so we're passing 444. This is kind of a safety feature that lets the token work ONLY on that single page. If someone other than the intended recipient were to get ahold of that email, they could click the link and see the recipient's contribution statement, but couldn't do anything else "as them" on the site.

The Recipients

Ok, hopefully now you have a new template that says what you want, with a nice clickable button that magically logs the recipient in to see their statement. The only thing we have left is identifying who to send these emails to. You may have a completely different process for identifying who to send a contribution statement email to, but ours is pretty simple:

Contribution Statement Dataview

Here we're simply using a DataView that returns People who 1) Gave within the date range we define, 2) Gave $1 or more to one of our selected funds, 3) Have an email address, and 4. The email address isn't set to Do Not Email. That's it! Now when we need to send the contribution statement, we just run that DataView and click Communication icon on the grid.


Hopefully this recipe is a good starting point for you. Obviously, each year you use this you should change the statement year from 2018 to whatever year you are wanting to send out, as well as the date range in the dataview. There are lots of enhancements that could be made like making the year dynamic instead of hard coding it into the URL and email body, but for something we send once a year, we didn't want to put that much effort into it. If you do, go for it. Oh, and please test this with yourself and maybe a few other safe people before you try to use it. It's really easy to mess up the link or token with a mistyped character or two, and sending out 10,000 emails with links that don't work (or worse, a link that is NOT for them) would be Really Bad (tm).

P.S. If you're wondering how you could possibly send out a link that is for someone else besides the recipient... it would be to accidentlly use {{ CurrentPerson | PersonTokenCreate }} instead of {{ Person | PersonTokenCreate }}. When you use CurrentPerson you're actually saying "Hey Rock, create a token for ME (the current person, aka the admin sending this email) and stuff it into this link... yes, that has actually happened and thousands of people received a link that logged them in as a Rock Admin for that org. YOU HAVE BEEN WARNED!


* The "contribution statement page" is NOT the Giving History page. It's the page you get to when you go to Giving History, THEN click one of the year buttons. THAT is the page you add the ContributionStatement route to. Also, DO NOT make the mistake of linking to the INTERNAL statement page, which is the page you get to from the Contributions tab on a Person Profile. If you link to that, users won't have rights to see it and will get an error.

** I've seen some people struggling with my direction to add a Page Route of ContributionStatement to their statement page. You do this by navigating to the statement page (see above) | Page Properties | Advanced Settings and enter ContributionStatement in the Page Routes box. That's it... don't enter any http:// or https://, etc.