give someone a (good) run for their money - definition and synonyms

phrase
  1. to compete very well against someone so that it is hard for them to defeat you

    A new phone company is giving the others a run for their money.

See also main entry: run