RSSAmplifier

Blog

Tech Thoughts

A blog about technology in general and nonprofit technology in particular - musings, stories, tutorials, and links. Written by Jason Samuels, an IT professional working in the nonprofit sector. Any opinions stated here are my own.

blog.jasonsamuels.netRSS feed ↗20 posts

Latest posts

Free Google Sheets nonprofit budget template for Intacct

This post shares a Google Sheets template that collects an operating budget from department and personnel budget owners, consolidates it, and produces a file formatted to import into Sage Intacct as a board approved budget. Up front, here are the downloadable resources: copy the Nonprofit Budget Planning Sheet for Intacct and its technical specifications from this folder . A note on the…

A free vibe coded Python script for bulk file extraction from a list of URLs

Here’s a free Python script that reads a list of URLs from a CSV file and downloads the file at each one . I recently used it to pull a 35+ GB batch of almost 13,000 files out of Airtable for a client’s data migration. I didn’t write this script - Claude did. But the code is short and readable enough that I could follow what it does, and I can attest that it worked exactly as…

Batching integration data in Salesforce - a declarative solution to a concurrency problem

What do you do when an external system transmits multiple simultaneous rows of data that all belong to the same transaction? That’s the integration engineering challenge I encountered recently. A constituent checks out once - an event ticket, a raffle ticket, a guest’s registration - and the upstream system sends one row per item. Those rows need to be consolidated into a single…

Blackthorn Events for Salesforce how-to: configure an automated cart abandonment email

This blog post documents how to configure an automated cart abandonment email for Blackthorn Events in Salesforce. I built this for a client who wanted to re-engage constituents who visit an event registration form and begin but do not finish the registration process. It’s basically the same tactic online retailers use when you leave something sitting in a shopping cart, applied to event…

Generate merged Google Docs from Salesforce using Zapier

Did you know that the Google Docs API has built-in mail merge functionality ? And that it’s available in Zapier’s Google Docs connector? If you’re a Salesforce admin who didn’t previously know that, you might be thinking what I thought when I found out - aha, I don’t need a document merge package any more! This blog post walks through how I implemented this for a…

Walking through the Power Query data model behind the analysis of NTEN’s Tech Accelerate dataset

Last summer I co-authored a capstone analysis of NTEN’s Tech Accelerate survey data. The data transformation engine behind that analysis was a Power Query model built in Power BI Desktop. This blog post shares and walks through that data model. This article serves two purposes: it’s an example of how a data model can be used to ingest raw nonprofit program data and manipulate it into a…

Get permissions out of profiles by consolidating Salesforce profile permissions to a baseline permission set using this free Power Query data model

Earlier this year I shared a Power Query data model for consolidating Salesforce profile permissions . This post shares a new version of that data model, which now consolidates permissions from multiple profiles into a single new baseline permission set. Salesforce has been steering admins towards permission set-led security for years. In 2023 they announced that permissions in profiles would be…

Salesforce Integration Engineering 101

In any integration design, the most foundational decision is what it writes to. My answer, almost every time, is a custom object that exists for that purpose. A few months back I wrote about building a hyper-efficient review queue interface in Salesforce , and tucked inside that post was an opinion I stated emphatically - that when you’re integrating data into Salesforce from a third-party…

Consolidate Salesforce profile permissions using this Power Query data model

**NOTE** please see this newer blog post for an updated data model template and instructions . Two software tools that I use a lot to deliver value from my consulting work are Salesforce and Power Query in Power BI Desktop. The latter is not very well known among my Salesforce peers, but I think it’s a hidden gem of a powerful free tool for data analysis and scripted transformations. This…

How to build a hyper-efficient user interface for a data review queue in Salesforce

I really enjoy the challenge of engineering integrations, working through the process of figuring out how a schema on one side fits a schema on the other side using elegant and maintainable plumbing in-between. Every use case is different and it’s always important to have a conversation about whether an integrated data feed should be trusted to create new records on its own, or whether…

Blackthorn Events for Salesforce how-to: build a screen flow to upload and manage attendee groups

My last blog post was about implementing a CSV import feature. This blog post documents utilizing that screen flow feature to facilitate attendee group management for Blackthorn Events. The scenario is an events center that uses Blackthorn Events and Salesforce for their day-to-day operations. Most of their event registrations are processed in their own system, but some events they host are run by…

Enabling CSV data uploads via a Salesforce Screen Flow

This is a tutorial for how to build a Salesforce Screen Flow that leverages this CSV to records lightning web component to facilitate importing data from another system via an export-import process. My colleague Molly Mangan developed the plan for deploying this to handle nonprofit organization CRM import operations, and she delegated a client buildout to me. I’ve built a few iterations since. I…

Practical Python in Power BI: Cleaning constituent data using dataprep.ai

Power BI is a powerful tool. In my consulting work I utilize Power Query for Power BI to transform and prepare constituent data for system migrations. One recent breakthrough in regards to making that even more powerful and efficient was the implementation of Python scripting and the dataprep library . The following articles were very helpful for figuring out how to do this: How to Use Python in…

Lessons learned from my dumb smart home

So, uh, long time no blog. It’s been over four years since my last post. A few things have happened since. I figure the best way to brush off the digital cobwebs is to share something amusing. I like gadgets. I’m not embarrassed to admit that, except when I think back to my Google Glass year a decade ago. Most of my technology purchases now are more reasonably priced, everyday tech,…

Creating a box office member lookup app with Glide using data from Salesforce

It’s a pretty cool feeling when you’re looking to build something very specific and you find a platform that does that specific thing really well. I recently had that experience and as a result have become a fast fan of Glide Apps. The use case at hand is for box office staff working at the American Craft Show to look up and check in members from our database. Free admission to the…

Super simple read more link using only CSS

Had an interesting challenge to work through the other day - I wanted to hide some description text on a webpage behind a Show Description link, but had to accomplish that using only CSS animation because our CMS (rightfully) will not allow me to inject arbitrary Javascript into a page via the WYSIWYG. I mean I didn’t really have to, I could have gone through the process of staging an update and…

How to configure Salesforce Customizable Rollups to roll up contact soft credits to Households

My org cut over from Raiser’s Edge to Salesforce in January 2018, and one of the pain points we encountered early on was that donation soft credits were recorded at the contact level but not at their household account level. A structural solution to this issue became available with the launch of NPSP Customizable Rollups in June 2018, and I’m now in process of building them out for my…

Tips and tools to migrate data from Raiser’s Edge to Salesforce

This blog post is overdue. My organization cut over from Raiser’s Edge to Salesforce early this year. Data conversion was a huge challenge, and this post aims to pay forward some tips, scripts, and spreadsheets for tackling an RE migration. It needs to start with some acknowledgements. These SQL scripts derive from the scripts in Jon Goldberg’s post on Exporting Raiser’s Edge for CiviCRM . I don’t…

File downloads restored

Throughout the years I’ve written numerous case study blog posts which then contain a file download link to obtain a template of the work described. It recently came to my attention that most of my download links were broken. Turns out I missed this annoucement about Dropbox shutting down links from the old Public folder as of September 1. The links have been restored and files can be…

How to export contacts and notes from ACT!

My organization is in the midst of a Salesforce implementation. We’re going in phases, replacing systems in order and getting departments live as they’re built out and ready to go. Our first department that went live on Salesforce converted over from a legacy ACT! database. This is a case study of the steps taken to get contacts and notes data out of that system. The department that we…