I am an English-Speaker living in a town where English is not the main language. When I moved here, my ability in the local language was intermediate and I was too shy to show how bad I was. I tried to hide that I didn't understand, I tried to pretend that I was fluent when I wasn't. This made people think I was really slow and stupid.
I realised that I was fooling nobody. Everyone KNEW I was English from my accent, and I was just shooting myself in the foot by pretending to know more than I did.
Even when you do state "English isn't my first language", they still don't know how good you are. There is a whole range of speaking abilities between knowing nothing and fluent. I tried telling people, but it didn't actually help because they didn't know what to do (Use simpler words? Talk slowly?). So this is what I figured out.
Don't try and pretend to know more than you do
You may not make this mistake, but I did so I'm putting it in for completeness. They probably can tell from your accent that you're not first-language English. If you don't know what they're saying, don't nod in any case and guess. Don't try and come across as fluent when you're not to impress them. It will have the opposite effect, because they'll be confused about where your ability is (nothing? fluent?) and in the worst case, they'll think you're fluent and just really slow.
Instead, ask clarifying questions
If they say something that doesn't make sense, ASK what it means.
What do you mean by ...
What does x mean?
This does a couple of things. It (1) allows you to clarify their meaning (and improve your vocabulary), (2) it indicates to them that when you don't understand, you will ask, and (3) it attributes any mistakes you make to your language ability (and not your intelligence. In fact, you sound more intelligent because you're actively engaging in learning the language!).
If you accurately represent your understanding by asking them when you don't understand, they'll get a much better feel for your level of ability and will trust that when you get lost, you will say something.
Learning a language is a humbling experience, but people are really forgiving.
I have always found myself to be more critical of my ability. I'll have a conversation with someone and feel absolutely horrible about it, and then ask my husband (who was present) about it later and he'll say he didn't notice any big mistakes at all. Yes, it is humbling to mess up with some grammar, but also many many native speakers use bad grammar all the time and don't even notice or care. Many people are appreciative of the fact that you are taking the time to learn their language in the first place.
It isn't necessary to bring up the language difference, but if you want to, tell others you'll ask if you get confused
I've found it isn't always necessary to bring up language most of the time. Most people figure it out just because of my accent and the questions I ask. If you want to speed up the process or say something, you can tell people that you'll ask questions if you don't understand, and that they're welcome to correct you (if you're open to corrections).
"English isn't my first language, but I will ask you if I don't
understand anything and you're welcome to tell me if I make a mistake"
This way, (1) you're justifying your language mistakes, (2) they're not expected to change the way they speak for you, and (3) they can trust that you will say something if you don't get it.
No matter if you choose to mention it or not, if you accurately portray your ability by asking questions and not pretending you know more than you do, they'll figure it out on their own pretty quickly and are probably going to be more helpful and forgiving than you think!