me.spar.co.za Open in urlscan Pro
41.79.77.152  Public Scan

URL: https://me.spar.co.za/
Submission: On January 30 via api from ZA — Scanned from DE

Form analysis 7 forms found in the DOM

Name: signin

<form name="signin" novalidate="" ng-show="mode === modes.signin" class="ng-pristine ng-invalid ng-invalid-required ng-valid-pattern ng-valid-minlength ng-valid-maxlength">
  <div class="form-item auth-heading"> <img src="/images/SPAR_logo_1.jpeg" alt="SPAR Logo" ng-show="LogoUrl">
    <p ng-show="LogoSubTitle" class="logo-subtitle ng-binding ng-hide"></p>
    <p id="instruction" ng-bind-html="CallToActionText" class="ng-binding">Sign in or register for SPAR Rewards and more!</p>
  </div>
  <div class="form-item"> <label for="mnum">Mobile Number</label>
    <div ng-show="loginMobileRequired || (signin.mnum.hasVisited &amp;&amp; signin.mnum.$invalid)" class="error ng-hide"> <span>Please enter a valid mobile number <span ng-show="isCountryZA" class="ng-binding">(e.g. 0821234567)</span></span> </div>
    <input type="tel" id="mnum" name="mnum" ng-model="user.mobile" required="" ng-pattern="/^\+?[\d]{8,15}$/i" minlength="8" maxlength="15" placeholder="Example: 0821234567" validate-on-blur="" focus-on="mobile-number-signin"
      ng-blur="isMobileNumberValid()" class="ng-pristine ng-untouched ng-empty ng-invalid ng-invalid-required ng-valid-pattern ng-valid-minlength ng-valid-maxlength">
  </div>
  <div class="form-item" ng-show="mode === modes.signin">
    <div class="recaptcha-wrap ng-isolate-scope" recaptcha-id="" id="LogInWithOPTRecaptcha" settings="settings" response="response">
      <div id="recaptureTarget2" class="g-recaptcha">
        <div style="width: 304px; height: 78px;">
          <div><iframe title="reCAPTCHA" width="304" height="78" role="presentation" name="a-v0g33wt8zpz5" frameborder="0" scrolling="no"
              sandbox="allow-forms allow-popups allow-same-origin allow-scripts allow-top-navigation allow-modals allow-popups-to-escape-sandbox allow-storage-access-by-user-activation"
              src="https://www.google.com/recaptcha/api2/anchor?ar=1&amp;k=6LcG1MUUAAAAAEyocr_U5NVFTSBtJMi1eqqWe1BX&amp;co=aHR0cHM6Ly9tZS5zcGFyLmNvLnphOjQ0Mw..&amp;hl=de&amp;v=QUpyTKFkX5CIV6EF8TFSWEif&amp;size=normal&amp;cb=21vhrq3i6ufs"></iframe>
          </div><textarea id="g-recaptcha-response-1" name="g-recaptcha-response" class="g-recaptcha-response"
            style="width: 250px; height: 40px; border: 1px solid rgb(193, 193, 193); margin: 10px 25px; padding: 0px; resize: none; display: none;"></textarea>
        </div>
      </div>
      <div id="googleScript3">
        <script src="https://www.google.com/recaptcha/api.js?onload=recaptureCallback10&amp;render=explicit" id="googleScript1"></script>
      </div>
    </div>
  </div>
  <div class="form-item"> <label class="remember-me custom-checkbox"> Remember Me <input type="checkbox" name="" value="" ng-model="user.rememberMe" class="ng-pristine ng-untouched ng-valid ng-not-empty"> <span class="checkmark"></span> </label>
  </div>
  <div class="form-item center">
    <div ng-show="mode === modes.signin"> <!-- ngIf: responseStatus --> </div> <button id="btnLogin" class="btn btn-primary submit" ng-click="submitSignInForm()" ng-class="{'loading' : loading}"> Log in </button>
    <div id="no-link-spacer"></div> <button class="btn btn-secondary" ng-click="goToRegistration()"> Register </button>
  </div>
</form>

Name: completeProfile

<form name="completeProfile" novalidate="" ng-show="mode == modes.completeprofile" class="ng-pristine ng-invalid ng-invalid-required ng-valid-email ng-hide ng-valid-pattern ng-valid-minlength ng-valid-maxlength">
  <div class="form-item auth-heading">
    <h1>My SPAR</h1>
    <p>Please complete your profile to continue</p>
  </div>
  <div class="form-item">
    <div class="row">
      <div class="col-sm-6 col-name"> <label for="firstName">First Name*</label>
        <div ng-show="completeProfile.firstName.hasVisited &amp;&amp; (completeProfile.firstName.$invalid)" class="error ng-hide"> <span>Required</span> </div>
        <div class="spacer ng-hide" ng-show="completeProfile.lastName.hasVisited &amp;&amp; (completeProfile.lastName.$invalid)">&nbsp;</div> <input type="text" name="firstName" ng-model="user.firstName" required="" validate-on-blur=""
          class="ng-pristine ng-untouched ng-empty ng-invalid ng-invalid-required">
      </div>
      <div class="col-sm-6 col-name"> <label for="lastName">Surname*</label>
        <div ng-show="completeProfile.lastName.hasVisited &amp;&amp; (completeProfile.lastName.$invalid)" class="error ng-hide"> <span>Required</span> </div>
        <div class="spacer ng-hide" ng-show="completeProfile.firstName.hasVisited &amp;&amp; (completeProfile.firstName.$invalid)">&nbsp;</div> <input type="text" name="lastName" ng-model="user.lastName" validate-on-blur="" required=""
          class="ng-pristine ng-untouched ng-empty ng-invalid ng-invalid-required">
      </div>
    </div>
  </div>
  <div class="form-item"> <label for="IDType">Identification Type*</label>
    <div ng-show="completeProfile.IDType.$invalid &amp;&amp; completeProfile.IDType.hasVisited" class="error ng-hide"> <span ng-show="completeProfile.IDType.$error.required" class="ng-hide">Identification Type is required.</span> </div> <select
      name="IDType" id="IDType" ng-model="user.IDType" ng-change="resetDateOfBirth()" class="ng-pristine ng-untouched ng-valid ng-not-empty">
      <option value="IDNumber" selected="selected">ID Number</option>
      <option value="Passport" ng-disabled="user.IDNumber">Passport</option>
    </select>
  </div> <!-- ngIf: user.IDType === 'IDNumber' -->
  <div class="form-item ng-scope" ng-if="user.IDType === 'IDNumber'"> <label for="IDNumber">ID Number*</label>
    <div ng-show="completeProfile.IDNumber.$invalid &amp;&amp; completeProfile.IDNumber.hasVisited" class="error ng-hide"> <span>Valid ID number required</span> </div> <input type="text" name="IDNumber" ng-model="user.IDNumber" required=""
      ng-pattern="^\+?[\d]{13}$" minlength="13" maxlength="13" validate-on-blur="" class="ng-pristine ng-untouched ng-empty ng-invalid ng-invalid-required ng-valid-pattern ng-valid-minlength ng-valid-maxlength">
  </div><!-- end ngIf: user.IDType === 'IDNumber' --> <!-- ngIf: user.IDType === 'Passport' --> <!-- ngIf: DateOfBirthRequired || user.IDType === 'Passport' -->
  <div class="form-item"> <label>Email Address</label>
    <div ng-show="completeProfile.Email.hasVisited &amp;&amp; completeProfile.Email.$invalid" class="error ng-hide"> <span>Please enter a valid email address.</span> </div> <input name="Email" type="email"
      class="email ng-pristine ng-untouched ng-valid ng-empty ng-valid-email" ng-model="user.email" validate-on-blur="">
  </div>
  <div class="form-item">
    <div class="recaptcha-wrap ng-isolate-scope" recaptcha-id="" id="completeEmailRecaptcha" settings="settings" response="response">
      <div id="recaptureTarget5" class="g-recaptcha">
        <div style="width: 304px; height: 78px;">
          <div><iframe title="reCAPTCHA" width="304" height="78" role="presentation" name="a-3t8x2zhzmz5u" frameborder="0" scrolling="no"
              sandbox="allow-forms allow-popups allow-same-origin allow-scripts allow-top-navigation allow-modals allow-popups-to-escape-sandbox allow-storage-access-by-user-activation"
              src="https://www.google.com/recaptcha/api2/anchor?ar=1&amp;k=6LcG1MUUAAAAAEyocr_U5NVFTSBtJMi1eqqWe1BX&amp;co=aHR0cHM6Ly9tZS5zcGFyLmNvLnphOjQ0Mw..&amp;hl=de&amp;v=QUpyTKFkX5CIV6EF8TFSWEif&amp;size=normal&amp;cb=wrryrnjm04vy"></iframe>
          </div><textarea id="g-recaptcha-response-2" name="g-recaptcha-response" class="g-recaptcha-response"
            style="width: 250px; height: 40px; border: 1px solid rgb(193, 193, 193); margin: 10px 25px; padding: 0px; resize: none; display: none;"></textarea>
        </div><iframe style="display: none;"></iframe>
      </div>
      <div id="googleScript6">
        <script src="https://www.google.com/recaptcha/api.js?onload=recaptureCallback11&amp;render=explicit" id="googleScript4"></script>
      </div>
    </div>
  </div>
  <div class="form-item"> <!-- ngIf: responseStatus --> <button id="btnCompleteEmail" class="btn btn-primary" ng-click="captureMissingProfile()" ng-class="{'loading' : loading}"> Continue </button> </div>
</form>

Name: completeCardInformation

<form name="completeCardInformation" novalidate="" ng-show="mode == modes.cardChoice" class="ng-pristine ng-valid ng-hide">
  <div class="form-item auth-heading">
    <h1>SPAR Rewards Card</h1>
    <p>Please link your new SPAR Rewards card</p>
  </div>
  <div class="form-item rewards-card-step"> <button id="btnShowLinkCard" class="btn btn-primary" ng-click="showLinkCard()" ng-class="{'loading' : loading}"> Link Card </button> <!--          TODO: REMOVE CANCEL BUTTON WHEN THE V2 CARDS ARE LIVE-->
    <button id="btnCancel" class="btn btn-default" ng-click="goToHome()"> Cancel </button> </div>
</form>

Name: updatecardinfo

<form name="updatecardinfo" novalidate="" ng-show="mode == modes.updatecardinfo" class="ng-pristine ng-valid ng-hide">
  <div class="form-item auth-heading">
    <h1>SPAR Rewards Card</h1>
    <p>Get your new SPAR Rewards card in-store today, for more Savings, more Rewards, more for You. <br><br>Do you want to link your profile to your new SPAR Rewards card?</p>
  </div>
  <div class="form-item rewards-card-step"> <button id="btnOk" class="btn btn-primary" ng-click="goToCardLink()"> Yes </button> <button id="btnNo" class="btn btn-default" ng-click="goToHome()"> No </button> </div>
</form>

Name: completeCardInformation

<form name="completeCardInformation" novalidate="" ng-show="mode == modes.completecardinfo" class="ng-pristine ng-invalid ng-invalid-required ng-hide">
  <div class="form-item auth-heading">
    <h1>SPAR Rewards Card</h1>
    <p>Turn your SPAR Rewards card over and you should see your card number just below the barcode. It should start with 88.</p>
  </div>
  <div class="form-item"> <label>Your SPAR Rewards Card Number</label> <input name="CardNumber" type="text" class="text ng-pristine ng-untouched ng-empty ng-invalid ng-invalid-required" ng-model="user.cardNumber" required="" validate-on-blur="">
  </div>
  <div class="form-item"> <!-- ngIf: responseStatus --> <button id="btnLinkCard" class="btn btn-primary" ng-click="linkCard()" ng-class="{'loading' : loading}"> Link Card </button> </div>
</form>

Name: register

<form name="register" novalidate="" ng-show="mode == modes.register" class="ng-pristine ng-invalid ng-invalid-required ng-valid-pattern ng-valid-minlength ng-valid-maxlength ng-valid-email ng-hide">
  <div class="form-item auth-heading">
    <h1>Sign Up</h1>
    <p id="regInstruction">It's Quick and Easy</p>
  </div>
  <div class="form-item"> <label for="regmnum">Mobile Number*</label>
    <div ng-show="register.mnum.hasVisited &amp;&amp; (RegisterMobileError || register.mnum.$invalid)" class="error ng-hide"> <span>Please enter a valid mobile number <span ng-show="isCountryZA" class="ng-binding">(e.g. 0821234567)</span></span>
    </div> <input type="tel" id="regmnum" name="mnum" ng-model="user.mobile" required="" ng-pattern="/^\+?[\d]{8,15}$/i" minlength="8" maxlength="15" placeholder="Example: 0821234567" focus-on="enter-mobile" validate-on-blur=""
      ng-blur="isMobileNumberValid()" class="ng-pristine ng-untouched ng-empty ng-invalid ng-invalid-required ng-valid-pattern ng-valid-minlength ng-valid-maxlength">
  </div>
  <div class="form-item">
    <div class="row">
      <div class="col-sm-6 col-name"> <label for="firstName">First Name*</label>
        <div ng-show="register.firstName.hasVisited &amp;&amp; (register.firstName.$invalid)" class="error ng-hide"> <span>Required</span> </div>
        <div class="spacer ng-hide" ng-show="register.lastName.hasVisited &amp;&amp; (register.lastName.$invalid)">&nbsp;</div> <input type="text" id="firstName" name="firstName" ng-model="user.firstName" required="" validate-on-blur=""
          class="ng-pristine ng-untouched ng-empty ng-invalid ng-invalid-required">
      </div>
      <div class="col-sm-6 col-name"> <label for="lastName">Surname*</label>
        <div ng-show="register.lastName.hasVisited &amp;&amp; (register.lastName.$invalid)" class="error ng-hide"> <span>Required</span> </div>
        <div class="spacer ng-hide" ng-show="register.firstName.hasVisited &amp;&amp; (register.firstName.$invalid)">&nbsp;</div> <input type="text" id="lastName" name="lastName" ng-model="user.lastName" validate-on-blur="" required=""
          class="ng-pristine ng-untouched ng-empty ng-invalid ng-invalid-required">
      </div>
    </div>
  </div> <!-- ID Number / Passport -->
  <div class="form-item"> <label for="IDType">Identification Type*</label>
    <div ng-show="register.IDType.$invalid &amp;&amp; register.IDType.hasVisited" class="error ng-hide"> <span ng-show="register.IDType.$error.required" class="ng-hide">Identification Type is required.</span> </div> <select name="IDType"
      ng-model="user.IDType" ng-change="resetDateOfBirth()" class="ng-pristine ng-untouched ng-valid ng-not-empty">
      <option value="IDNumber" selected="selected">ID Number</option>
      <option value="Passport">Passport</option>
    </select>
  </div> <!-- ngIf: user.IDType === 'IDNumber' -->
  <div class="form-item ng-scope" ng-if="user.IDType === 'IDNumber'"> <label for="IDNumber">ID Number*</label>
    <div ng-show="register.IDNumber.$invalid &amp;&amp; register.IDNumber.hasVisited" class="error ng-hide"> <span>Valid ID number required</span> </div> <input type="text" id="IDNumber" name="IDNumber" ng-model="user.IDNumber" required=""
      ng-pattern="^\+?[\d]{13}$" minlength="13" maxlength="13" validate-on-blur="" class="ng-pristine ng-untouched ng-empty ng-invalid ng-invalid-required ng-valid-pattern ng-valid-minlength ng-valid-maxlength">
  </div><!-- end ngIf: user.IDType === 'IDNumber' --> <!-- ngIf: user.IDType === 'Passport' --> <!-- ngIf: DateOfBirthRequired || user.IDType === 'Passport' -->
  <div class="form-item"> <label>Email Address</label>
    <div ng-show="register.Email.hasVisited &amp;&amp; register.Email.$invalid" class="error ng-hide"> <span>Please enter a valid email address.</span> </div> <input name="Email" type="email"
      class="email ng-pristine ng-untouched ng-valid ng-empty ng-valid-email" ng-model="user.email" validate-on-blur="">
  </div>
  <div class="form-item popia-terms">
    <ol ng-show="enablePOPIAChecks">
      <li>The SPAR Group LTD, with its head offices located at 22 Chancery Lane, Pinetown is collecting this information to enable us to resolve your query and it will be used for this purpose only and disposed of thereafter, unless you consent to
        the information being retained for marketing purposes. </li>
      <li>This information is given to us by you voluntarily and of your own free will.</li>
      <li>If you do not wish to provide us with this information, are unable to do so, or object to it being used, it may result in us being unable to assist you further. </li>
      <li>To resolve your issue, and for that purpose only, we may share this information with third parties, unless you consent to it being shared for marketing purposes. </li>
      <li>You have the right to access this information while in our possession and make corrections if necessary. </li>
      <li>You also have the right to lodge a complaint via email with the office of the Information Regulator, at <a href="mailto:complaints.IR@justice.gov.za">complaints.IR@justice.gov.za</a>, if you are unhappy with the manner in which we deal with
        your information. </li>
    </ol> <!-- This one is required -->
    <div> <label class="custom-checkbox"> <b>Do you agree to the <a href="javascript:void(0);" title="SPAR Terms and Conditions" ng-click="launchTermsLink()">Terms &amp; Conditions</a> and therefore consent to us processing your information?</b>
        <input type="checkbox" name="" value="" ng-model="user.popiconsent" class="ng-pristine ng-untouched ng-valid ng-empty"> <span class="checkmark"></span> </label>
      <div ng-show="showPOPIError &amp;&amp; user.popiconsent == false" class="error ng-hide"> <span>Please agree to the terms above</span> </div>
    </div>
    <div> <label class="custom-checkbox"> You further consent to us retaining your details for the purposes of sending you information about new specials, rewards and other news which may be relevant to you. You can opt out any time in the future.
        <input id="" type="checkbox" name="" value="" ng-model="user.optedInToComms" class="ng-pristine ng-untouched ng-valid ng-not-empty"> <span class="checkmark"></span> </label> </div>
  </div>
  <div class="form-item">
    <div class="recaptcha-wrap ng-isolate-scope" recaptcha-id="" id="registerRecaptcha" settings="settings" response="response">
      <div id="recaptureTarget8" class="g-recaptcha">
        <div style="width: 304px; height: 78px;">
          <div><iframe title="reCAPTCHA" width="304" height="78" role="presentation" name="a-7qtt66xt9t1i" frameborder="0" scrolling="no"
              sandbox="allow-forms allow-popups allow-same-origin allow-scripts allow-top-navigation allow-modals allow-popups-to-escape-sandbox allow-storage-access-by-user-activation"
              src="https://www.google.com/recaptcha/api2/anchor?ar=1&amp;k=6LcG1MUUAAAAAEyocr_U5NVFTSBtJMi1eqqWe1BX&amp;co=aHR0cHM6Ly9tZS5zcGFyLmNvLnphOjQ0Mw..&amp;hl=de&amp;v=QUpyTKFkX5CIV6EF8TFSWEif&amp;size=normal&amp;cb=j16ha0oh1yf"></iframe>
          </div><textarea id="g-recaptcha-response" name="g-recaptcha-response" class="g-recaptcha-response"
            style="width: 250px; height: 40px; border: 1px solid rgb(193, 193, 193); margin: 10px 25px; padding: 0px; resize: none; display: none;"></textarea>
        </div>
      </div>
      <div id="googleScript9">
        <script src="https://www.google.com/recaptcha/api.js?onload=recaptureCallback12&amp;render=explicit" id="googleScript7"></script>
      </div>
    </div>
  </div> <!-- ngIf: responseStatus -->
  <div class="form-item">
    <div ng-show="InvalidRegisterForm" class="error ng-hide"> <span>The form could not be submitted because it contains errors. Please review the form fields above for details.</span> </div> <button id="btnRegisterReq"
      class="btn btn-secondary btn-full-width" ng-class="{'loading' : loading}" ng-click="requestRegistrationOTP(false)"> Register </button>
  </div>
</form>

Name: registrationVerification

<form name="registrationVerification" novalidate="" ng-show="mode == modes.verify" class="ng-pristine ng-invalid ng-invalid-required ng-valid-minlength ng-valid-maxlength ng-hide">
  <div class="form-item auth-heading">
    <h1>Verify Account</h1>
    <p>Please verify your account</p>
  </div>
  <div class="form-item">
    <p class="ng-binding">We've sent a One Time PIN to to verify your account. Please enter the PIN below.</p>
  </div>
  <div class="form-item"> <label for="rotp">PIN</label>
    <div ng-show="registrationVerification.otp.hasVisited &amp;&amp; registrationVerification.otp.$invalid" class="error ng-hide"> <span ng-show="registrationVerification.otp.$error.required || VerifyAccountError" class="">Check your phone for your
        One Time PIN</span> <span ng-show="registrationVerification.otp.$error.minlength || registrationVerification.otp.$error.maxlength" class="ng-hide">Invalid PIN (must be 6 characters)</span> </div> <input type="tel" id="rotp" name="otp"
      ng-model="user.oneTimePin" required="" placeholder="Enter One Time PIN" inputmode="numeric" autocomplete="one-time-code" validate-on-blur="" minlength="6" maxlength="6" focus-on="enter-otp-register"
      class="ng-pristine ng-untouched ng-empty ng-invalid ng-invalid-required ng-valid-minlength ng-valid-maxlength">
  </div>
  <div class="form-item"> <!-- ngIf: responseStatus --> <button id="btnVerifyAccount" class="btn btn-primary submit ng-hide" ng-class="{'loading' : loading}" ng-show="isRegistrationOTP()" ng-click="registerCustomer()"> Verify Account </button>
    <button id="btnSignIn" class="btn btn-primary submit ng-hide" ng-class="{'loading' : loading}" ng-show="isLoginOTP()" ng-click="completeLogin()"> Login </button>
    <a ng-click="requestResendOTP()" href="javascript:void(0);" class="text-link" ng-show="canResendOTP" id="lnkRegisterResendPin">Resend PIN</a>
    <p class="text-center ng-binding">PINs expire within 15 minutes.</p>
  </div>
</form>

Text Content

JAVASCRIPT DISABLED :(

Sorry, JavaScript appears to be disabled in your browser. The SPAR Rewards
application requires JavaScript enabled in order to work correctly. Please
enable JavaScript in your browser settings and then refresh this page.


COOKIES DISABLED :(

Sorry, cookies appear to be disabled in your browser. The SPAR Rewards
application requires cookies to be enabled in your browser. Please enable
cookies in your browser settings and then refresh this page.



Sign in or register for SPAR Rewards and more!

Mobile Number
Please enter a valid mobile number (e.g. 0821234567)

Remember Me

Log in

Register


MY SPAR

Please complete your profile to continue

First Name*
Required
 
Surname*
Required
 
Identification Type*
Identification Type is required.
ID Number Passport
ID Number*
Valid ID number required
Email Address
Please enter a valid email address.

Continue


SPAR REWARDS CARD

Please link your new SPAR Rewards card

Link Card Cancel


SPAR REWARDS CARD

Get your new SPAR Rewards card in-store today, for more Savings, more Rewards,
more for You.

Do you want to link your profile to your new SPAR Rewards card?

Yes No


SPAR REWARDS CARD

Turn your SPAR Rewards card over and you should see your card number just below
the barcode. It should start with 88.

Your SPAR Rewards Card Number
Link Card


SIGN UP

It's Quick and Easy

Mobile Number*
Please enter a valid mobile number (e.g. 0821234567)
First Name*
Required
 
Surname*
Required
 
Identification Type*
Identification Type is required.
ID Number Passport
ID Number*
Valid ID number required
Email Address
Please enter a valid email address.
 1. The SPAR Group LTD, with its head offices located at 22 Chancery Lane,
    Pinetown is collecting this information to enable us to resolve your query
    and it will be used for this purpose only and disposed of thereafter, unless
    you consent to the information being retained for marketing purposes.
 2. This information is given to us by you voluntarily and of your own free
    will.
 3. If you do not wish to provide us with this information, are unable to do so,
    or object to it being used, it may result in us being unable to assist you
    further.
 4. To resolve your issue, and for that purpose only, we may share this
    information with third parties, unless you consent to it being shared for
    marketing purposes.
 5. You have the right to access this information while in our possession and
    make corrections if necessary.
 6. You also have the right to lodge a complaint via email with the office of
    the Information Regulator, at complaints.IR@justice.gov.za, if you are
    unhappy with the manner in which we deal with your information.

Do you agree to the Terms & Conditions and therefore consent to us processing
your information?
Please agree to the terms above
You further consent to us retaining your details for the purposes of sending you
information about new specials, rewards and other news which may be relevant to
you. You can opt out any time in the future.

The form could not be submitted because it contains errors. Please review the
form fields above for details.
Register


VERIFY ACCOUNT

Please verify your account

We've sent a One Time PIN to to verify your account. Please enter the PIN below.

PIN
Check your phone for your One Time PIN Invalid PIN (must be 6 characters)
Verify Account Login Resend PIN

PINs expire within 15 minutes.


Terms and Conditions
x


PLEASE VERIFY YOUR AGE

Please indicate whether you are over 18

You need to be at least 18 years old to use SPAR Rewards
Required
Required
Required
Year20062005200420032002200120001999199819971996199519941993199219911990198919881987198619851984198319821981198019791978197719761975197419731972197119701969196819671966196519641963196219611960195919581957195619551954195319521951195019491948194719461945194419431942194119401939193819371936193519341933193219311930192919281927192619251924
Month Day

Sign up for TOPS Rewards Cancel Terms and Conditions


UNDERAGE

It seems that you are not old enough to be a TOPS customer. Please try again
when you're 18 years old.

Close


AN ERROR OCCURRED

An error occurred when trying to register for TOPS. Please refresh and try
again.

Close

WE CARE ABOUT YOUR PRIVACY

SPAR uses cookies to improve your experience on our website. By continuing to
browse, you agree to the use of cookies on our website. To find out more, see
SPAR's cookie policy.