I'm running a recurring, ongoing survey (new participants are added every semester) where the questionnaire is always accessed via one static, non-personalized link, distributed as a QR code (never via personalized invitation e-mails or serial mail). Within the questionnaire, participants provide their e-mail address via a single "Opt-In E-Mail-Verteiler" question. The e-mail address itself is correctly stored in the List of Contacts.
My goal is to later match a person's records across different time points/waves based solely on the e-mail address they enter. I do not need or want to see the SERIAL–e-mail mapping myself (I understand that's kept anonymous by design, which is fine).
The problem: since the questionnaire is always started via the same open/public link rather than a personalized one, the SERIAL variable stays empty in every record. I understand this is because SERIAL is only populated when a run is started via a personalized link, not when an e-mail is simply entered during the survey via the opt-in question.
My question: is there any supported way to have SoSci Survey, at the moment the e-mail address is entered, check whether that address already has an existing personal key from a previous submission, and write the corresponding identifier into the current record — automatically, and without ever sending an actual e-mail to the participant (e.g. via the API access / "Send Invitations → API access" feature called from within the questionnaire)? Or is matching via e-mail simply not possible with a static/QR-code link, meaning the only supported options are (a) switching to personalized invitation links (mailSchedule()/mailResume(), serial mail), or (b) using a self-generated "personal code" instead of the e-mail address?
I'd like to keep the single static QR-code link and the e-mail opt-in if at all possible, since re-sending personalized invitation links isn't practical for our setup with continuously incoming new cohorts.
Thank you very much for any help!