LOYALTY MARKETING SOLUTIONS

re:member group

re:engage

Communicate with your customers in meaningful ways

LOYALTY

Organizations that have loyal customers close more deals and sell more service.
Your customers expect more. Be the one to give it to them.
When you exceed their expectations they become advocates of your brand. 

Increased Visits

Loyalty program members are 70% more likely to make repeat visits.
 

Increased Referrals

Loyal customers become an extension of your brand and refer their friends, family and colleagues to your business.

Increased Sales

Loyal customers are far less price conscious. On average loyal customers spend 40% more than non-loyal customers.

Increased Feedback

It is important to know how you are doing, loyal customers are far more likely to fill out surveys and reviews.

YOUR CUSTOMERS DEMAND THE BEST

Since we’ve implemented our Loyalty program, we’ve experienced about a 10-15% uptick in sales from previous customers and almost a 15-20% increase in overall service sales. The re:member group is fast, responsive, collaborative and easy to work with, and their analytics dashboards make it easy for me to monitor and adjust.

Mike Martin – Auto Aves

SOLUTIONS

re:sults: what we do best

Points – Integrated, automatic, easy, effective

Motivate your customers by awarding them points towards future purchases. Get your very own customized points program that will get your customers coming back, again and again. Our points system is hands-off, tracked automatically. We do all of the work, so just kick back and watch your loyalty program come to life.

Rewards – incentivize, value, close

Close more sales by offering your customers additional rewards for doing business with you. Our partnerships put discounts at over 250,000 retailers in your customer’s hands. We can customize an incentive program that gives your customers real value by making them Elite card-carrying members.

eMarketing – Targeted, engaging, turn-key, powerful

Communicate with your customers in meaningful ways with a targeted email campaign. We have the knowledge to design a customized, brand-right email campaign that will break through inbox clutter and grab your customer’s attention.

NUMBERS SPEAK FOR THEMSELVES

6

Billion Points Awarded

19

Thousand Redemptions

488

Million Points Redeemed

13

Years of Business

ABOUT US

Who We Are

Founded in 2002 and headquartered in St. Louis Park, Minnesota, we created the perfect loyalty solution that will turn your customers into true fans. We specialize in automotive reward programs, as well as retail and services. Our customer retention programs are fully integrated and easy to use, perfect for people without any loyalty knowledge.

  • Why you should go responsive with your emails! Click the link to read our blog post. http://t.co/T849LbeGcU http://t.co/PsK1lihJSZ

    re:member group about 152 days ago
  • The goal as a company is to have customer service that is not just the best but #legendary. –Sam Walton

    re:member group about 202 days ago
  • Everyone likes to feel #appreciated! How do you show your customers that you care? http://t.co/z7YT4BsSiH

    re:member group about 202 days ago

EXPERIENCE IS KEY TO SUCCESS

  • A repeat customer spends 67% more than a new one.
     

    (BIA/Kelsey)
  • 68% say that coupons generate loyalty.
     

    (RetailMeNot)
  • 54% buy more from companies when they are being rewarded for purchases.

    (Points.com)
  • 69% said they would break habit and choose a different brand in order to earn more points or miles.

    (Points.com)

WORK

Mathews Rewards
ABC Just For Me Rewards
Auto Aves Advantage
Club OpenRoad
Mander Auto Club
Capstone Rewards

CONTACT

Get In Touch

INTERESTED?

CAPTCHA image

* These fields are required.


OUR ESTEEMED PARTNERS

BLOG

Mobilegeddon and You

cartoon pow

Boom! Pow! Biff!

That’s potentially the sound of your website’s SEO getting worked over by the latest version of the mighty Googlebot, the all powerful and probably sentient program responsible for sifting through the internet and ranking sites against their rivals. Why only potentially worked over, you ask? Easy, go here to the Google Mobile-Friendly Test, type in your address and hit analyze. Did it respond all green and awesome?  Fantastic! The Googlebot is your friend and it ranked you higher for having a mobile-friendly site – Pat yourself (or your development team) on the back. Better yet, give them a bonus because they just saved you a lot of time and money fixing both your site and your SEO.

So why is the Googlebot harshing the mellow of non-responsive sites? To start, we all know what a non-responsive site looks like on our mobile devices: pure garbage with pinching and zooming and very choice words; in other words, a very bad user experience. It turns out that most (over 60%!) google searches, are made on mobile devices, whether it be a phone or tablet which closely matches how we use the internet today. Rather than deliver a site that will give you a poor time, google announced that their signature bot will henceforth favor sites with mobile-friendly, responsive designs* which means the site that comes up first will give you a much better experience for the device your’re browsing on.

*As a quick FYI, mobile-friendly simply means that your site tailors itself to best fit whatever device it’s being viewed on.

So what happens if the Mobile-Friendly Test gave your site an F? Well, you’ll need to get out the check book and endure the told-you-sos from your development team because it’s time for you to bring your company into the next era of the internet.  The faster you do this, the better, because every day you stall is another day that your rival’s site gets clicked on first because it’s higher on the results page.

In the end, the upgrade will repay itself and more and your company will be better for it.

 

Luke Mettling
Web Designer & Frontend Developer
re:member group

Secrets to getting the most out of your customer loyalty program

customer loyalty satisfaction

As you know, at re:member group we specialize in automotive loyalty marketing. And along the way we have learned what makes an automotive loyalty program a success. In today’s fast paced, highly digitalized world, it isn’t enough to just create a loyalty program and hope it does all the heavy lifting for you.

The creation of a successful loyalty program takes into consideration how it interacts with customers, and how well it delivers their wants and needs. Loyalty isn’t a scheme it’s a relationship, and like any relationship, it takes time and hard work, but it is always worth the effort. Studies suggest it costs more to acquire a new customer than to keep an old one, so why not take advantage of that!

Things to think about when designing your program

Set a goal that you want your customer to achieve

For example, if you have an automotive loyalty program in place, your ultimate goal for them may be to redeem their points on a future service, or vehicle purchase. Without a goal for them to reach, they will have no motivation to earn points.

Think about what behaviors you want to reward them for.

Do you want to reward them for filling out a survey, getting their vehicle serviced, referring a friend? Decide on some behaviors that would benefit your company, and let them know how much you appreciate it by rewarding them.

Give them a head start

Do you want to reward them for the simple act of engaging, such as activating their rewards account? Giving them an easy way to earn points when they get started is like giving them a head start. We all know how the endowed progress effect works right? If not, it’s rather interesting, and you should read more about it here.

Make it easy for them to interact

Some loyalty programs make it so confusing to figure out how many points you have, or how you can go about redeeming those points. With our loyalty programs we make sure it is easy for the customer to keep track of their points, redeem points, and understand all the ways they can earn rewards. They can login and see all the important information about their account from any device, making it easy for them to be engaged in the program.

Continue to engage with your customers

We have all done it, signed up for a rewards program just to get a specific discount or benefit, and then it leaves our mind, and we never think about it again. Without interaction, a customer either loses interest, or forgets all about it. That’s why it is important to interact with them by sending them emails, or offers in the mail that allow them to take advantage of special discounts or events. If you treat them like they are important and not just another number, they will be more likely to be repeat customers.

Engaging the customer with a relevant message builds trust and keeps the company on the top of their mind for when they are ready to purchase in the future. According to Retail TouchPoints a customer’s overall satisfaction with a loyalty program is 4.6 fold higher when they receive relevant communications.

Continue to evaluate the existing strategies

Listen to things your rewards members are saying. We get customer feedback on a daily basis in our customer service department. Another way to get honest and helpful feedback is to send out surveys. Find out what existing strategies have been successful. Consistently listen to your customers on an ongoing basis to revise the program as needed. If you can understand the customer needs, then it is easy to craft a valuable customer loyalty program.

When a customer loyalty program is done right, it can be very rewarding. But if done wrong, it is just a waste of time. If you already have a customer loyalty program with us, hopefully you learned some helpful tips on getting the most out of your program. If you are interested in setting up a loyalty program for your business, or would like some more information, please give us a call at 952-224-8000.

Database Admin Tips – Part 1

pointing-at-customers

Data is a critical part of business infrastructure, and managing that data is ever increasing in importance for a business to be able to function efficiently and effectively. It is crucial to make sure the data is well structured, optimized, and is of the highest integrity. At the re:member Group, we strive to ensure our customer data stays secure yet as available as is possible, keeping it efficient and maximizing usability as it grows larger and more complex on a daily basis.

I was hired on with the re:member group as a .NET/SQL developer, but my role quickly increased to take care of the databases in addition to a number of other responsibilities. The database systems they had at the time when I arrived, about one year ago, were certainly functional and generally operating pretty well. Still, there were a few items that needed improvement – it was clear that the database had been worked on by many, many people over the 12 years it had been in service, each with their own style of development and management. Plus, it was large enough and complicated enough that I had to do something to at least get an overview of what was going on. There were a number of routines and agent jobs that clearly needed improvement, as they would take far too long than was acceptable to run. Also, with the thousands of tables and stored procedures involved, it was clear that many were no longer in use. So the first thing I had to do was get an overview of the system, cut through the clutter, and start optimizing. As I’m not a fan of re-inventing wheels, so I found there are many, many good scripts on the internet for doing pretty much anything in SQL. There are also many very bad ones. Through experiment and modification I have collected a series of scripts which have ended up working very well. I will share some of the techniques I learned to accomplish the necessary goals. I’m going to skip a lot of the ‘why’ and focus on the ‘how’, in order to keep this concise and useful. There’s plenty of information on the ‘why’ parts available across the internet, I just want to focus on getting things done.

(note, you may see the lines commented out which look like –database_id=DB_ID(). When this is commented out, it will return results for the current database. When it is uncommented, it will return results for all databases. Feel free to modify as needed.)

So, lets dive right in. First, I needed to get a handle on exactly what I’m working with. So first, lets find out which tables are taking up the most space:

SELECT t.NAME AS TableName,s.Name AS SchemaName,p.rows AS RowCounts,SUM(a.total_pages) * 8 AS TotalSpaceKB
    ,SUM(a.used_pages) * 8 AS UsedSpaceKB,(SUM(a.total_pages) - SUM(a.used_pages)) * 8 AS UnusedSpaceKB
FROM sys.tables t INNER JOIN sys.indexes i ON t.OBJECT_ID = i.object_id 
	INNER JOIN sys.partitions p ON i.object_id = p.OBJECT_ID AND i.index_id = p.index_id
	INNER JOIN sys.allocation_units a ON p.partition_id = a.container_id 
	LEFT OUTER JOIN sys.schemas s ON t.schema_id = s.schema_id
WHERE t.NAME NOT LIKE 'dt%' AND t.is_ms_shipped = 0 AND i.OBJECT_ID > 255 GROUP BY t.Name, s.Name, p.Rows
ORDER BY TotalSpaceKB desc

OK, that’s good. Now lets find out which of these tables are actually being used. There is a very useful table called sys.dm_db_index_usage_stats which holds much of this information. Unfortunately, this tables’s statistics are cleared every time the server or SQL service get restarted. So what we need to do is to first is to create a table to hold this data, then create a procedure to copy the useful information from dm_db_index_usage_stats into this newly created table, and finally create an agent job to run every half hour or so which calls the procedure to update this table on a regular basis. So, first let’s create our table:

CREATE TABLE [dbo].[tbl_TableUsage]([Schema] [varchar](50) NOT NULL,[TableName] [varchar](255) NOT NULL,
	[LastReadTime] [datetime] NULL,	[LastWriteTime] [datetime] NULL,
 CONSTRAINT [PK_tbl_TableUsage] PRIMARY KEY CLUSTERED 
(	[Schema] ASC, [TableName] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

Then, we need to create the routine which will update this table:

Create proc [dbo].[Get_ServerInfo]
as
declare @t table([Schema] varchar(50),[TableName] varchar(255),[LastReadTime] datetime,[LastWriteTime] datetime)
declare @latest table([object_id] varchar(255),last_user_seek datetime,last_user_scan datetime,last_user_lookup datetime,last_user_update datetime)

insert into @latest SELECT [object_id],last_user_seek,last_user_scan,last_user_lookup,last_user_update
   FROM sys.dm_db_index_usage_stats -- WHERE database_id = DB_ID()
   
insert into @t
  SELECT [Schema] = OBJECT_SCHEMA_NAME([object_id]),[TableName] = OBJECT_NAME([object_id]),
      LastReadTime = MAX(last_read),LastWriteTime = MAX(last_write)
  FROM
    (SELECT [object_id], last_user_seek, NULL FROM @latest UNION ALL
     SELECT [object_id], last_user_scan, NULL FROM @latest UNION ALL
     SELECT [object_id], last_user_lookup, NULL FROM @latest UNION ALL
     SELECT [object_id], NULL, last_user_update FROM @latest UNION ALL
     SELECT so.object_id,NULL,NULL FROM sys.objects so WHERE so.type = 'U' AND so.object_id > 100
   ) AS x ([object_id], last_read, last_write)
   GROUP BY OBJECT_SCHEMA_NAME([object_id]),OBJECT_NAME([object_id]) ORDER BY [Schema],[TableName]
      
insert into tbl_TableUsage select b.* from @t b where not exists 
   (select a.* from tbl_TableUsage a where a.[Schema]=b.[schema] and a.[TableName]=b.[TableName])

update tbl_TableUsage set LastReadTime = a.LastReadTime, LastWriteTime=a.LastWriteTime from @t a, tbl_TableUsage b
where exists (select c.* from tbl_TableUsage c where a.[Schema]=c.[schema] and a.[TableName]=c.[TableName])
and a.[Schema]=b.[Schema] and a.[TableName]=b.[TableName]
and ( a.LastReadTime > isnull(b.LastReadTime,'1900-01-01') or a.LastWriteTime > isnull(b.LastWriteTime,'1900-01-01'))

select * from tbl_TableUsage order by [schema],[TableName]

Finally, create an agent job to run this stored procedure once every half hour, or whatever is to your liking. Now you can either check tbl_TableUsage, or run the stored procedure Get_ServerInfo, and you will see the last time your tables have been accessed. Keeping in mind that some tables may only be accessed once a week, or even once a month, after some time goes by you will have a clear picture of what tables are actually in use.

Ok, now that we have a grasp on what our tables are up to, lets find out if there are any procedures or agent jobs that are ‘hanging’ or otherwise causing issues. First, lets check those agent jobs and see which ones are taking the longest times to run.

select j.name as 'JobName',run_date,run_time,msdb.dbo.agent_datetime(run_date, run_time) as 'RunDateTime',
run_duration,((run_duration/10000*3600 + (run_duration/100)%100*60 + run_duration%100 + 31 ) / 60) as 'RunDurationMinutes'
From msdb.dbo.sysjobs j INNER JOIN msdb.dbo.sysjobhistory h ON j.job_id = h.job_id where j.enabled = 1
order by RunDurationMinutes desc

It would then be a good idea to investigate what the agent jobs that are taking a very long time to run are actually doing, and seeing how they might be able to be optimized. If an agent job, or something else is hanging, the following should give you a good idea of what’s going on.

SELECT * FROM sys.dm_os_waiting_tasks  wt 
LEFT OUTER JOIN sys.dm_exec_requests c ON wt.session_id = c.session_id
CROSS APPLY sys.dm_exec_sql_text (c.sql_handle)

What’s especially useful is the last column, which gives you the text of the actual command that is causing the issue, which you can then track down and optimize/handle accordingly.

Finally, we want to prevent blocking, which is a very bad thing. This happens when two separate routines are attempting to access the same table at the same time, and for whatever reason one is locking the table, preventing the other routine from doing whatever it’s trying to do. This is not a good thing, as it can make routines fail, cause timeouts, and could prevent users from doing what they’re trying to do. Probably the easiest way I’ve found is to drop the results of the system stored proc “sp_who2″ into a temp table, look for the ‘blkby’ column to contain data, then you can see who is blocking whom with the ‘login’ and ‘hostname’ columns. Using techniques similar to what I’ve posted above, you could load the results into a temp table, create a procedure to check this and notify in some fashion when blocking occurs, and then run it in an agent job however often you’d like to check. Additionally, the ‘CPUtime’ and ‘DiskIO’ columns are useful to identify costly queries. I’ve not actually done this on my system for reasons I will explain shortly, so I do not have the scripts to post. However, if I had no extra DB tools, that’s what I would do.

Time for a shameless advertisement. I was fortunate to be provided with some database monitoring software which will monitor the health of the database server and databases for most any condition that can happen, help identify bottlenecks, resolve blocking, optimize queries, and lots, lots, lots more. It is incredibly useful for all levels of DB admins, from beginner to expert. It is called “Spotlight on SQL Server”, and more information about it can be found here http://software.dell.com/products/spotlight-on-sql-server-enterprise/. There is a free trial available and I highly recommend anyone to give it a try. I really cannot say enough good things about it, and I am in no way affiliated with it from a business standpoint.

So, I think this is all a pretty good start for getting your bearings on the system and seeing what is causing the most basic issues.

Next time, I will discuss indexes, another critical part of any database system that is going to run efficiently.

Thank you for reading, and good luck with all things SQL.

Lou