You have to get their attention first.
Back when I cleaned, I did several restaurants. And the way I got most of them was to go there and eat and look at the carpet as I did. I wrote my price on the back of one of my business cards, then, while I was still seated, I asked for "the manager".
Believe me on this: A customer asking for the manager, while eating, has a totally different response, than a mail- out, or a walk- in to quote.
If they have someone they're "happy with", a very good question to ask is: "When was the last time your carpet was cleaned?".
I got responses as recent as, "last night", and "last week", related to carpets that were obviously not clean.
Best way to get their attention in response to their attempted brush- off is to walk over to a wall, where the carpet is close to original condition, in terms of cleanliness, and point it out to them. "THIS is how your carpet should look. Not, THAT." Then offer to do a free demo to show them what you're describing isn't that difficult.
When doing a demo, tell them up front that you'll do a section for free, just to show them the difference. Make sure it's one of the dirtiest areas and preferably a large dining area. Then do half of the room, making sure to leave a line as a result, that is a night and day difference.
Trust me on this: If you get to that point, and you do make that much of a difference, you have the account.
I got a chain of restaurants that way. We went in the very next night (by pre- arranged agreement with the manager...) after their cleaner did, and drew a line across the banquet room, changing the color of the carpet of the area we cleaned, back to the original red and silver, from the then- current burgundy and gray. And the cleaner who had them had 2 opportunities to go back (We were about 30% more expensive than he was...) and clean as thoroughly as we did- but just couldn't make that line go away.
The secret is high heat / high flow and CleanStreak, BTW...