Your cart is currently empty!
Jetpack CRM implementation
I recently migrated into Jetpack CRM free edition (no premium add-ons used). This is a great free plugin with significant premium add-on capabilities, supported by the same company as WordPress.com and WooCommerce.com
Here’s my experience with it so far:
I like how the admin menu offers regular main menu item mode versus individual main items and even a mode for CRM only use cases (front end site off). This is nice for usage on a production site versus a subdomain or intranet.
It has a nice core system for adding and editing contacts and companies and their respective contact info, statuses, and notes / logs of various methods. Those two seemed like obvious necessities. No problem, adding them was easy!
It supports custom fields, and custom statuses. I definitely had to create a URL field for company entries, plus a contact field (or tag) for their source / referrer.
I like the separation of contacts and companies for my situations where one agency refers multiple companies, or one company has multiple contacts. This is a great included module called B2B.
I also like the ability to direct email individual contacts via wp_mail, connected to my domain’s email service.
An area that remains a bit unclear is email marketing. I use Klaviyo with clients and developers, but I could use a way to bulk email prospects for status checks. It doesn’t seem to offer this. However, Jetpack non CRM does have a Follow Blog feature that sends new post notifications. That feature is limited to 100 users on the free plan.
One area I had to do considerable work on was using the free API module to import data. It imports contacts and companies, but the latter was not documented and I had to do code review to figure out how to do it. There remained no way to connect contacts to companies so I had to add a WPDB query to achieve that. See my import code.
Jetpack CRM data import code snippet
add_action( 'admin_notices', function() {
// Settings
$API_URL = site_url() . '/zbs_api/%s?api_key=%s&api_secret=%s';
$API_Key = 'jpcrm_pk_#####PASTE#####';
$API_Sec = 'jpcrm_sk_#####PASTE#####';
// Input Data (CSV format, escape any single quotes!)
// Cols: Date, Status, First, Last, Email, Tel, City, Country,
// Cols: Custom: Source, Company, Company Tag 1, Company Tag 2
// Date Format: YYYY-MM-DD
$csv_data = '';
// Loop Data
global $wpdb;
$data = explode( "\n", $csv_data );
foreach( $data as $row ) {
$row = str_getcsv( trim( $row ) );
// Create Contact Record
$args = [
'assign' => '1',
'status' => $row[1],
'fname' => $row[2],
'lname' => $row[3],
'email' => $row[4],
'worktel' => $row[5],
'city' => $row[6],
'country' => $row[7],
'custom-field-source' => $row[8],
];
$response = wp_remote_post(
sprintf(
$API_URL, 'create_customer', $API_Key, $API_Sec
),
[ 'body' => json_encode( $args ) ]
);
$contact_response = json_decode(
wp_remote_retrieve_body( $response )
);
// Halt On Error
if( empty( $contact_response->id ) ) {
echo 'ERROR - Contact ';
print_r( $contact_response );
return;
}
// Set Created Date
$wpdb->update(
$wpdb->prefix . 'zbs_contacts',
[ 'zbsc_created' => strtotime( $row[0] ) ],
[ 'zbsc_email' => $row[4] ]
);
// Maybe Create Company Record
if( $row[9] ) {
$args = [
'assign' => '1',
'name' => $row[9],
'email' => $row[4],
'tags' => [],
];
if( $row[10] ) {
$args['tags'][] = $row[10];
}
if( $row[11] ) {
$args['tags'][] = $row[11];
}
$response = wp_remote_post(
sprintf(
$API_URL, 'create_company', $API_Key, $API_Sec
),
[ 'body' => json_encode( $args ) ]
);
$company_response = json_decode(
wp_remote_retrieve_body( $response )
);
// Halt On Error
if( empty( $company_response->id ) ) {
echo 'ERROR - Company';
print_r( $company_response );
return;
}
// Set Created Date
$wpdb->update(
$wpdb->prefix . 'zbs_companies',
[ 'zbsco_created' => strtotime( $row[0] ) ],
[ 'zbsco_email' => $row[4] ]
);
// Bind Contact With Company
$args = [
'zbs_site' => 1,
'zbs_team' => 1,
'zbs_owner' => -1,
'zbsol_objtype_from' => 1,
'zbsol_objtype_to' => 2,
'zbsol_objid_from' => $contact_response->id,
'zbsol_objid_to' => $company_response->id,
];
$wpdb->insert( $wpdb->prefix . 'zbs_object_links', $args );
}
// Admin Feedback
echo $row[4] . ' ';
} // Loop Data Ends
} );
Alternatively, there is a paid add-on that can import more advanced spreadsheets, but this developer prefers to lift the hood, naturally. Speaking of the hood, this CRM plugin was originally called No BS CRM. It uses its own DB tables for efficiency.
So I do recommend Jetpack CRM in general. Reply if you would like to do a free consultation to discuss your project. Thanks for reading.
Share this:
Note: I may receive compensation for referrals.